Django 模型外键还是 charfield?

Django model foreignkey or charfield?

Django Model and Form that I want to make

您好。我是 Django 的新手,我很难理解要使用哪个模型字段。我没有 post 任何代码,因为我的代码现在太乱了,而且大部分代码仍然遵循 William S. Vincent 的“Django for Beginner”一书。

我有一个包含 2 个模型的应用程序,Product 模型和 Production 模型。生产模型上的某些字段已 link 编辑到产品模型。然后根据生产模型,我使用 ModelForm 为用户输入创建了一个表单。 (图像有一个 link 以帮助理解模型和形成关系。)

关于这件事我有几个问题。

  1. 如果我将 Production 模型上的 product_id 设置为 ForeignKeyProduct,我应该为 product_namematerial 使用哪个字段?
  2. 当我对 product_namematerial 使用 CharField 时,表格上有 product_namematerial 的条目,但我没有想要那个。如何将其更改为只读并根据 product_id 更新值? (我不确定这是否与 Django 表单有关。)
  3. 现在我正在使用 ModelForm 制作 Production 表单,然后使用 FormView 呈现表单。这是正确的方法吗?这个和模型的CreateView有什么区别?

提前感谢您的任何评论和回答。

如果产品模型上有名称和 material,则生产模型上不需要它们,除非它们与生产对象相关。如果我是你,我会在产品的 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 页左右。您也可以用它做只读字段。