Я создаю приложение базы данных для моей компании, которая производит оборудование для оргтехники. Я хотел бы иметь возможность хранить модели, которые мы продаем, а также опции, которые go для каждой модели.
(для ясности я буду ссылаться на модели, которые мы продаем, как на модели продуктов, чтобы не путать Django модель с нашей моделью)
Вот требования:
- Каждая модель продукта может иметь много вариантов
- Каждая опция может go для многих моделей продуктов
- Каждый параметр может быть стандартным для некоторых моделей продуктов и дополнительным для других
Я хотел бы сохранить все эти данные, что на самом деле не является проблемой. Я сделал это, как показано ниже:
models.py:
class ProductModel(models.Model):
modelID = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
model_number = models.CharField(max_length=25, editable=True, unique=True)
slug = models.SlugField(null=False, unique=True)
model_description = models.TextField(max_length=5000, editable=True)
family_id = models.ForeignKey(ProductFamily, on_delete=models.DO_NOTHING, editable=True, null=False, blank=False) #relates to the family of the product model
class Option(models.Model):
option_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
option_model_number = models.CharField(max_length=50, verbose_name='model number', editable=True, unique=True)
slug = models.SlugField(null=False, unique=True)
option_description = models.TextField(max_length=500, editable=True,
help_text='A description of what the function of the option')
model_id = models.ManyToManyField(ProductModel, through='OptionBelongsToModel')
class OptionBelongsToModel(models.Model):
product_model = models.ForeignKey(ProductModel, on_delete=models.DO_NOTHING)
product_option = models.ForeignKey(Option, on_delete=models.DO_NOTHING)
is_standard = models.BooleanField() #defines if this option is standard for this particular relation
forms.py
class OptionForm(ModelForm):
class Meta:
model = Option
fields = ['option_model_number', 'option_description', 'model_id']
views.py
class OptionCreateView(CreateView):
model = Option
form_class = OptionForm
Когда форма отображается, очевидно, поле is_standard
из таблицы OptionBelongsToModel
не отображается и не будет сохранено. Я хотел бы иметь возможность определять состояние этого поля каждый раз, когда сохраняются новые параметры. Я понимаю, что встроенные наборы форм используются для отображения информации из нескольких моделей, но этот параметр здесь не подходит, поскольку каждый параметр для отношения модели продукта может иметь различные настройки is_standard
. Поэтому для каждого выбора модели продукта должен быть сделан выбор.
Заранее благодарим за любые советы, которые могут прийти.