Python ModelForm的form类可以更改属性吗?
我在StackOverflow上读过一些关于Python ModelForm的form类可以更改属性吗?,python,django,forms,Python,Django,Forms,我在StackOverflow上读过一些关于forms.Formvsforms.ModelForm的帖子 当数据库中已经有表单的表时,最好使用ModelForm,这样就不必再次声明所有属性,因为它们已经存在于model.py中的相应类中 所以我的问题是 如何排除原始类的一系列属性,下面的排除表达式是否正确 class CreatePositionForm(ModelForm): class Meta: model = job_position e
forms.Form
vsforms.ModelForm
的帖子
当数据库中已经有表单的表时,最好使用ModelForm
,这样就不必再次声明所有属性,因为它们已经存在于model.py中的相应类中
所以我的问题是
class CreatePositionForm(ModelForm):
class Meta:
model = job_position
exclude = ('create_date','post_date','is_valid',)
form.field_name.errors
我是Django的新学员,如果这些问题看起来很愚蠢,请容忍,非常感谢您的澄清您可以使用ModelForm并更改原始属性,但在大多数情况下,Django做得很好 Django表单非常有用,您可以执行高级验证,添加一些业务逻辑。django表单呈现HTML,但即使您的django项目不提供HTML,您可能仍在使用django表单 您的排除代码似乎没有问题,但请注意,使用
Meta.excludes
被认为是一种安全风险。使用Meta.fields
exclude = ['create_date','post_date','is_valid']
ModelForm
只会使模型和表单更加耦合,以便正确地进行验证。如果使用表单
代替模型中的相同字段,则必须重新定义字段类型表单
可以减少管理字段属性的麻烦。若您更改了模型中的某些内容,这些更改将自动反映到表单的HTML中。您不必每次都手动更改HTML。它还可以帮助您进行自动验证“验证”似乎是3的一个重要答案——它通常是web框架的一个主要特性。至于不使用HTML标记,有一个问题:如果您已经定义了表单的字段是什么(出于验证目的),为什么要在模板中复制它?有一个关于表单外观的真实来源(在Django中,是
表单
对象,或模型表单
s与模型
s),并从该单一来源派生出您可以使用的内容(HTML)。1-是的,可以使用
exclude = ['create_date','post_date','is_valid']
更多关于模型形式的信息,请点击此处-
2-不能更改模型窗体的属性是错误的,
您可以通过在类中定义相同的属性来克服它
你可以做任何事情,比如用普通形式来覆盖初始值,选择等等
exa-
3-最有价值的好处是,它能够自行进行表单验证,无论您是否编写自己的html,都必须编写一长行代码。
例如,您已经给出了一个char字段,它将抛出一个错误,并将error类添加到html的field属性中,这是一个很大的优点。
因此,在开发检查功能性的同时,它减少了编写html的开销。表单和模型表单都扩展了相同的类:
class BaseModelForm(BaseForm)
class Form(BaseForm)
因此:
新字段=forms.CharField(最大长度=100) 类元:
模型=工作职位 排除=('create_date'、'post_date'、'is_valid'、) 但是,您必须将它们包括在字段列表中(如果要渲染它们): 。。。。 类元: .... 字段=[…,“新字段”,…] 当你存钱的时候,你需要注意这个字段
form.form
类的优点是不需要编写额外的代码。例如:假设您有一个定义如下的模型:
class Profile(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField()
phone = models.IntegerField()
profile_summary = models.TextField()
# .. some more fields ..
现在,让我们使用3种不同的方法创建一个表单,看看哪种方法最容易实现
简单HTML表单
对于普通HTML表单,您需要在模板中实现表单元素,然后自己验证数据,如下所示
<form id="profile-form">
<div>
<label>First Name</label>
<input name="first_name" type="text" />
</div>
<div>
<label>Last Name</label>
<input name="last_name" type="text" />
</div>
<div>
<label>Email</label>
<input name="email" type="text" />
</div>
<div>
<label>Phone Number</label>
<input name="phone" type="text" />
</div>
<div>
<label>Profile Summary</label>
<textarea name="profile_summary"></textarea>
</div>
</form>
使用表单。表单类
from django import forms
class ProfileForm(forms.ModelForm)
class Meta:
model = models.Profile
from django import forms
class ProfileForm(forms.ModelForm)
class Meta:
model = models.Profile
fields = ('first_name', 'last_name', 'email', 'profile_summary')
使用django.forms.Form
类,可以如下定义表单
from django import forms
class ProfileForm(forms.Form):
first_name = forms.CharField()
last_name = forms.CharField()
email = forms.EmailField()
phone = forms.IntegerField()
summary = forms.TextField()
# Notice the code duplication here
# we already have this defined in our models.
使用ModelForm类
from django import forms
class ProfileForm(forms.ModelForm)
class Meta:
model = models.Profile
from django import forms
class ProfileForm(forms.ModelForm)
class Meta:
model = models.Profile
fields = ('first_name', 'last_name', 'email', 'profile_summary')
因此,使用ModelForm
类,您只需在4-5行代码内创建表单,还可以让django为您进行验证并显示表单错误
现在回答大家的问题,
from django import forms
class ProfileForm(forms.ModelForm)
class Meta:
model = models.Profile
fields = ('first_name', 'last_name', 'email', 'profile_summary')