Проблемы, с которыми вы можете столкнуться, связаны с тем, что Django не будет воссоздавать таблицы или столбцы на основе изменения объявлений модели. Это означает, что вы не можете добавлять поля в таблицу во время выполнения, не запустив сгенерированный sql в вашей базе данных вручную. Вместо этого вам понадобится способ определения пользовательских полей и привязка их к вашей модели.
Я бы предложил следующее:
class CustomField(models.Model):
name = models.CharField(max_length=32)
class Book(models.Model):
... fields
class CustomValue(models.Model):
field = models.ForeignKey(CustomField)
value = models.CharField(max_length=255)
book = models.ForeignKey(Book)
Проверка по вышесказанному практически не существует, и это не позволяет вам определять обязательные настраиваемые поля для каждой модели, но вы сможете создать эту часть, если она потребуется позже. *
# taken and modified from django online tutorial
class CustomValueInline(admin.StackedInline):
model = CustomValue
extra = 3
class BookAdmin(admin.ModelAdmin):
fieldsets = [
# your fields in here
]
inlines = [CustomValueInline]
admin.site.register(Book, BookAdmin)
Это позволит пользователям выбирать до 3 настраиваемых полей и значений напрямую, с возможностью добавить больше, если они пожелают.
Редактировать: Изменен ответ, чтобы отразить дополнительную информацию в комментариях.