Python 使用基于类的视图处理表单时创建模型
我试图学习django 1.7中基于类的视图 我有两个模型,第二个模型有外键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
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类中的方法是有效的,但我如何更改小部件中的数据?