Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用基于类的视图处理表单时创建模型_Python_Django_Django Forms_Django Views - Fatal编程技术网

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

Python 使用基于类的视图处理表单时创建模型,python,django,django-forms,django-views,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): mo

我试图学习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的表单之前输入文本并创建实例。我不知道如何使用基于类的视图和表单来实现这一点。

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

class MyForm(ModelForm):

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

class BCreateView(CreateView):

    model = B
    form_class = MyForm

查看此处的更多详细信息:

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

即使我创建了这样的表单,我仍然需要自定义验证方法,因为在保存B之前应该先创建A。这里a1只接受pk,但我只需要传递文本。可能我必须重写Form类中的方法是有效的,但我如何更改小部件中的数据?