首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表单、模型、模型表单

表单、模型、模型表单
EN

Stack Overflow用户
提问于 2010-08-23 17:52:13
回答 2查看 506关注 0票数 2

现在,我可以在模型中创建所有必需的db字段。

我可以创建表单来访问这些模型。

如果我从模型创建表单:

http://docs.djangoproject.com/en/dev/topics/forms/modelforms/

我不明白,为什么我必须像这样重新定义字段:

代码语言:javascript
复制
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中这样做了吗?

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-23 18:20:29

如果你有一个名为Author的模型,你可以为这个模型声明一个ModelForm,如下所示:

代码语言:javascript
复制
class AuthorForm(forms.ModelForm): # Note the different superclass. 
    class Meta:
        model = Author

如果您想要一个包含Author的所有属性的表单,那么这就是您所需要做的。但是,如果您只需要Author属性的一个子集(比如nametitle),那么您可以修改模型形式,如下所示:

代码语言:javascript
复制
class AuthorForm(forms.ModelForm): # Note the different superclass. 
    class Meta:
        model = Author
        fields = ('name', 'title',)

请注意,在这里您不必使用CharField

另一方面,如果你想要除了nametitle之外的所有东西,那么你可以这样定义表单:

代码语言:javascript
复制
class AuthorForm(forms.ModelForm): # Note the different superclass. 
    class Meta:
        model = Author
        exclude = ('name', 'title',)

更新

(阅读评论后)你可以像对待any other regular form一样对待AuthorForm。在您的视图中,您可以根据request.method实例化这个表单,有数据也可以没有数据。如下所示:

代码语言:javascript
复制
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.

在您的模板中:

代码语言:javascript
复制
{{ form.as_p }}

有用于呈现表单的different waysas_p只是其中之一。

票数 3
EN

Stack Overflow用户

发布于 2010-08-23 18:03:44

您正在使用forms.Form而不是forms.ModelForm和declare,这是您正在使用的模型(在class Meta中)。也许这就是问题所在。你能描述一下,你的哪种型号的电脑出了问题吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3546423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档