创建 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 个对象,然后使用单个表单在两者之间创建关系的主要内容,如果未能解决你的问题,请参考以下文章

如何根据2个数据源过滤SSRS报告

vue 使用WebSocket 连接

使用WebSocket进行全双工通信

对象之间的核心数据关系

H5新增特性

ARKit 和 .dae 文件,对象之间的奇怪空间