Django модель foreignkey или charfield?

Django модель и форма, которую я хочу сделать

Здравствуйте. Я довольно новичок в Django и мне трудно понять, какое поле модели использовать. Я не выложил никакого кода, потому что мой код сейчас очень беспорядочен и большая его часть все еще следует книге "Django для начинающих" Уильяма С. Винсента

У меня есть приложение, состоящее из 2 моделей, Product модель и Production модель. Некоторые поля в производственной модели связаны с моделью продукта. Затем из производственной модели я делаю форму для ввода пользователем с помощью ModelForm. (Здесь есть ссылка на изображение, помогающее понять связь модели и формы.)

У меня есть несколько вопросов по этому поводу.

  1. If I set product_id on Production Model as ForeignKey to Product, what field should I use for product_name and material?
  2. When I use CharField for both product_name and material, there are entry for both product_name and material on form and I don't want that. How to change it to readonly and have value updated based on product_id? (I'm not sure if this is related to Django form or not.)
  3. Right now I'm using ModelForm to make Production form and then using FormView to render the form. Is it the right approach? What is the difference between this one and CreateView from model?

Заранее благодарю за любые комментарии и ответы.

Если у вас есть название и материал в модели продукта, вам не нужны эти данные в модели производства, если только они не относятся к объекту производства. На вашем месте я бы сделал внешний ключ Production на продукт. Это может выглядеть примерно так;

class Production(models.Model):
    product = models.ForeignKey(
        to=Product,
        verbose_name=_("Product"),
        on_delete=models.CASCADE
    )
    machine = models.CharField(
        verbose_name=_("Machine No"),
        max_length=255
    )
    date = models.DateTimeField(
        verbose_name=_("Date"),
        blank=True,
        null=True
    )

Тогда ваша форма может быть такой:

class ProductionForm(forms.ModelForm):
    class Meta:
        model = Production

        fields = (
            'product',
            'machine',
            'date',
        )

Я бы рекомендовал использовать админку django, чтобы привести модели в нужное вам состояние, прежде чем начинать работать с представлениями. Если вы знаете, что данные хранятся так, как вам нужно, тогда вы можете беспокоиться о создании фронтенда. Администрирование находится примерно на странице 70 той книги, которая у вас есть. Вы также можете сделать поля, доступные только для чтения.

Вернуться на верх