避免 Django ModelForm 和 Django Model 之间的重复

Avoid repetition between Django ModelForm and Django Model

我感兴趣的是有没有一种方法可以避免 Django ModelForm 和 Django Model 之间的重复。 例如。我有这个最简单的模型:

class Category(models.Model):
    name = models.CharField(max_length=128)

和对应的 ModelForm

class CategoryForm(forms.ModelForm):
    name = models.CharField(max_length=128)
    class Meta:
        model = Category
        fields = ('name',)

正如我们所见,这些实体之间存在重复。此代码

max_length=128

- 是否违反"Don't repeat yourself"原则?
如果违反了,我们如何避免这种代码重复?

但在您的情况下,您不必在表单中再次指定 name 字段。

你使用的是ModelForm,所以在Meta中定义model,就是引用这个Form和fields,应该在form中使用。 Django 将为您获取小部件并构建表单。

够了

class CategoryForm(forms.ModelForm):
    class Meta:
        model = Category
        fields = ('name',)

正如另一个答案中所指出的,您不需要重新声明 ModelForm 中的字段。您只需要在 class Meta 的 fields 属性中列出它们。如果你觉得不够干。您可以使用 __all__

Set the fields attribute to the special value 'all' to indicate that all fields in the model should be used. For example:

参考:https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/

--型号

class Category(models.Model):
    name = models.CharField(max_length=128)

-表格

class CategoryForm(forms.ModelForm):
  class Meta:
    model = Category
    fields = ('name',)

-查看

class CategoryView(request):
    form = CategoryForm()
    if request.method == "POST":
        #code..
        return render(request,'htmlpage.html',{Variables: Variables})
    else: 
        return render(request, "htmlpage.html",{'form':form})

已创建 'form',查看页面加载。这里来自 html 页面的请求是用 POST 查询的。如果没有请求 post,则将 FORM 模板发送到 html 页面。