我感兴趣的是有一种方法可以避免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;不要重复自己"原则?
如果它违反了,我们怎样才能避免这种代码重复?
答案 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页面。