Использование промежуточной таблицы с дополнительными данными и отображение дополнительных данных в форме - PullRequest
0 голосов
/ 12 апреля 2020

Я создаю приложение базы данных для моей компании, которая производит оборудование для оргтехники. Я хотел бы иметь возможность хранить модели, которые мы продаем, а также опции, которые go для каждой модели.

(для ясности я буду ссылаться на модели, которые мы продаем, как на модели продуктов, чтобы не путать Django модель с нашей моделью)

Вот требования:

  1. Каждая модель продукта может иметь много вариантов
  2. Каждая опция может go для многих моделей продуктов
  3. Каждый параметр может быть стандартным для некоторых моделей продуктов и дополнительным для других

Я хотел бы сохранить все эти данные, что на самом деле не является проблемой. Я сделал это, как показано ниже:

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. Поэтому для каждого выбора модели продукта должен быть сделан выбор.

Заранее благодарим за любые советы, которые могут прийти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...