Django модель foreignkey или charfield?
Django модель и форма, которую я хочу сделать
Здравствуйте. Я довольно новичок в Django и мне трудно понять, какое поле модели использовать. Я не выложил никакого кода, потому что мой код сейчас очень беспорядочен и большая его часть все еще следует книге "Django для начинающих" Уильяма С. Винсента
У меня есть приложение, состоящее из 2 моделей, Product модель и Production модель. Некоторые поля в производственной модели связаны с моделью продукта. Затем из производственной модели я делаю форму для ввода пользователем с помощью ModelForm. (Здесь есть ссылка на изображение, помогающее понять связь модели и формы.)
У меня есть несколько вопросов по этому поводу.
- If I set
product_idonProductionModel asForeignKeytoProduct, what field should I use forproduct_nameandmaterial? - When I use
CharFieldfor bothproduct_nameandmaterial, there are entry for bothproduct_nameandmaterialon form and I don't want that. How to change it to readonly and have value updated based onproduct_id? (I'm not sure if this is related to Django form or not.) - Right now I'm using
ModelFormto makeProductionform and then usingFormViewto render the form. Is it the right approach? What is the difference between this one andCreateViewfrom 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 той книги, которая у вас есть. Вы также можете сделать поля, доступные только для чтения.