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