创建 2 个对象,然后使用单个表单在两者之间创建关系
Posted
技术标签:
【中文标题】创建 2 个对象,然后使用单个表单在两者之间创建关系【英文标题】:Creating 2 objects and then creating a relation between the two using a single form 【发布时间】:2014-07-17 10:01:11 【问题描述】:您好,我创建了一个视图,让我可以创建 2 个共享相同表单的不同模型。
我的“成员”模型有一个“成员角色”字段。我想要的是当正确填写此表单并单击提交后,创建与“memberrole”模型关联的字段,然后将其分配给与它共享表单的“member”模型。
我似乎无法理解我应该如何处理这项任务。我对 Web 开发比较陌生,这会是使用 AJAX 有帮助的地方吗?
模型
class MemberRole(models.Model,get_fields):
name = models.CharField(max_length = 20)
def __unicode__(self):
return self.name
class Member(models.Model,get_fields):
first_name = models.CharField(max_length = 20)
role = models.ForeignKey(MemberRole, null = True, blank = True)
表格
class MemberForm(forms.ModelForm):
class Meta:
model = Member
exclude = ('role',)
class MemberRoleForm(forms.ModelForm):
class Meta:
model = MemberRole
网址的sn-p
url(r'^members', ModelListView.as_view(model = Member,page_name = 'Members',edit_link = 'updatemember/'), name='member-list'),
url(r'^addmember', 'inventory.views.add_member', name = 'member-add'),
查看功能
def add_member(request):
model_url = 'member-add'
if request.method == "POST":
rform = MemberRoleForm(request.POST, instance=MemberRole())
mform = MemberForm(request.POST, instance=Member())
if rform.is_valid() and mform.is_valid():
new_role = rform.save()
new_member = mform.save()
return HttpResponseRedirect('members')
else:
rform = MemberRoleForm(instance=MemberRole())
mform = MemberForm(instance=Member())
return render_to_response('create_model.html', 'role_form': rform, 'member_form': mform, 'model_url': model_url,,context_instance=RequestContext(request))
create_model.html 的 sn-p
<form action="% url model_url %" method="POST">
% csrf_token %
% if model_url == 'member-list' %
% for field in member_form %
<div class="fieldWrapper">
field.errors
field.label_tag field
</div>
% endfor %
% for field in role_form %
<div class="fieldWrapper">
field.errors
field.label_tag field
</div>
% endfor %
% endif %
<input id="save_contact" type="submit" value="Add"/>
</form>
【问题讨论】:
【参考方案1】:这里根本不需要 Ajax - 这真的不是它的用途。
您可以在保存项目时设置关系。
if rform.is_valid() and mform.is_valid():
new_role = rform.save()
new_member = mform.save(commit=False)
new_member.role = new_role
new_member.save()
return ....
【讨论】:
以上是关于创建 2 个对象,然后使用单个表单在两者之间创建关系的主要内容,如果未能解决你的问题,请参考以下文章