现在,我可以在模型中创建所有必需的db字段。
我可以创建表单来访问这些模型。
如果我从模型创建表单:
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/
我不明白,为什么我必须像这样重新定义字段:
class AuthorForm(forms.Form):
name = forms.CharField(max_length=100)
title = forms.CharField(max_length=3,
widget=forms.Select(choices=TITLE_CHOICES))
birth_date = forms.DateField(required=False)为什么我必须在这里定义CharField?我不是已经在models.py中这样做了吗?
非常感谢。
发布于 2010-08-23 18:20:29
如果你有一个名为Author的模型,你可以为这个模型声明一个ModelForm,如下所示:
class AuthorForm(forms.ModelForm): # Note the different superclass.
class Meta:
model = Author如果您想要一个包含Author的所有属性的表单,那么这就是您所需要做的。但是,如果您只需要Author属性的一个子集(比如name和title),那么您可以修改模型形式,如下所示:
class AuthorForm(forms.ModelForm): # Note the different superclass.
class Meta:
model = Author
fields = ('name', 'title',)请注意,在这里您不必使用CharField。
另一方面,如果你想要除了name和title之外的所有东西,那么你可以这样定义表单:
class AuthorForm(forms.ModelForm): # Note the different superclass.
class Meta:
model = Author
exclude = ('name', 'title',)更新
(阅读评论后)你可以像对待any other regular form一样对待AuthorForm。在您的视图中,您可以根据request.method实例化这个表单,有数据也可以没有数据。如下所示:
def add_author(request, *args, **kwargs):
if request.method == 'GET':
form = AuthorForm()
elif request.method == 'POST':
form = AuthorForm(request.POST.copy())
if form.is_valid():
author = form.save()
# Redirect to listing etc.
context = dict(form = form)
return render_to_response(template_name, context) # etc.在您的模板中:
{{ form.as_p }}有用于呈现表单的different ways;as_p只是其中之一。
发布于 2010-08-23 18:03:44
您正在使用forms.Form而不是forms.ModelForm和declare,这是您正在使用的模型(在class Meta中)。也许这就是问题所在。你能描述一下,你的哪种型号的电脑出了问题吗?
https://stackoverflow.com/questions/3546423
复制相似问题