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

时间:2017-02-14 23:16:36

标签: python django django-models django-forms dry

我感兴趣的是有一种方法可以避免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

- 是否违反了#34;不要重复自己"原则?
如果它违反了,我们怎样才能避免这种代码重复?

3 个答案:

答案 0 :(得分:1)

但在您的情况下,您不必再在Form 1中指定name字段。

您正在使用ModelForm,因此在Meta中只需定义模型,该模型应引用此表单和字段,应在表单中使用。 Django将为您提取小部件并构建表单。

这样就够了

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

答案 1 :(得分:0)

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

  

将fields属性设置为特殊值' all '以指示   应该使用模型中的所有字段。例如:

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

答案 2 :(得分:0)

- 模型

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})

创建'表单',查看页面加载。这里使用POST查询来自html页面的请求。如果未请求帖子,则会将FORM模板发送到html页面。