我的模型有一个父对象,每个父对象可以有零个或多个由外键关联的子对象。
我的自动生成ModelForm非常适合父对象,但我希望用户能够在创建父对象的同时创建一个或多个子对象。注意,我不是指从预先存在的子对象中选择 - 我的意思是从头开始创建子对象...
我目前正在使用大量的django魔法来让我的表格显得非常简单:我意识到可能需要改变以完成这项工作!
这是我现在所拥有的一个想法:
# urls.py
(r'^create/$',
CreateAppView.as_view(
model=App,
template_name='edit.html')),
# edit.html
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
# model
class App(models.Model):
name = models.CharField(max_length=100)
class Activation(models.Model):
app = models.ForeignKey(App)
# view
class AppForm(ModelForm):
class Meta:
model = App
class CreateAppView(CreateView):
def post(self, request, *args, **kw):
form = AppForm(request.POST)
if form.is_valid():
app = form.save()
return HttpResponseRedirect(reverse('app_detail', args=(app.id,)))
else:
return super(CreateAppView, self).post(request, *args, **kw)
答案 0 :(得分:4)
实际上,所有这些功能都以inline model formsets。
的形式提供答案 1 :(得分:2)
添加多个不同名称的表单?
问题是你必须知道有多少表格被渲染并且具有更具体的模板。
类似的东西:
# edit.html
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ appform.as_p }}
{{ appform2.as_p }}
<input type="submit" value="Submit" />
</form>
并在视图中:
appform= AppForm(request.POST, prefix="1")
appform2= AppForm(request.POST, prefix="2")
它也适用于不同的模型:
appform= AppForm(request.POST, prefix="app")
spamform = SpamForm(request.POST, prefix="spam")
我不确定你的urls.py,因为我从未使用过那个功能/快捷方式......很简单;)
答案 2 :(得分:0)
要使用内联模型表单集在一个视图中创建相关模型,请查看this SO post: