使用基于类的视图处理表单时创建模型

时间:2014-11-20 23:12:06

标签: python django django-forms django-views

我试图在django 1.7中学习基于类的视图。

我有两个模型,第二个模型首先有外键。

class A(models.Model):                    
    text = models.CharFeild(max_length=10)

class B(models.Model):
    a1 = models.ForeignKey(A)
    content = models.TextField()

class BCreateView(CreateView):
    model = B
    fields = ['a1', 'content']

并形成:

<form action="?" method="post">
    <table>
        {{ form.as_table }}
    </table>
    <input type="submit" value="create" /> 
</form>

当用户使用第一个模型的值输入数据而不是下拉列表时,我想使用文本输入,因此用户只需在处理B表单之前输入文本和A创建实例。我无法做到弄清楚如何使用基于类的视图和表单来做到这一点。

2 个答案:

答案 0 :(得分:0)

您需要创建一个自定义表单,而不是依赖于自动生成的表单,django为您提供了CreateView。

class MyForm(ModelForm):

  class Meta:
    model = B
    fields = ('a1', 'content)
    widgets = {
        'a1': TextInput(),
    }

然后在你的视图中:

class BCreateView(CreateView):

    model = B
    form_class = MyForm

在此处查看更多详情:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-fields

答案 1 :(得分:0)

所以最终我从FormView继承了BCreateView,并将form类定义为forms.Form的后代,并在post方法中手动检查表单。