Django - 内联formset和多对多关系

时间:2014-08-01 21:15:23

标签: django forms many-to-many inline-formset

所以我有2个模特:团队和会员。我有一个名为MemberTeam的数据透视表。

这是我的MemberTeam模型:

    member = models.ForeignKey(Member)
    team = models.ForeignKey('acpkinballmanageteams.Team',verbose_name=_("team"))
    role = models.CharField(max_length=15,choices=ROLE_CHOICES,verbose_name=_("role"),blank=False,default='player')

因此,当管理员创建团队时,我希望他们直接添加玩家。所以我创建了一个inlineformset。这是我的MemberTeamForm:

class MemberTeamForm(forms.ModelForm):

    member = AutoCompleteSelectField(lookup_class=MemberLookup2,required=True)

    class Meta:
        model = MemberTeam

没什么可幻想的。以下是我创建表单集的方法:

TeamRosterFormset = inlineformset_factory(Team, MemberTeam, fields=('member','role'), \
form=MemberTeamForm,can_delete=True, extra=1, max_num=18)

如果我创建一个团队并且不添加任何成员,那么一切正常。如果我从团队编辑页面添加/编辑/删除成员,它也可以正常工作。问题是当我尝试添加一个包含成员的团队时,我收到此错误: ""需要有一个领域的价值"团队"在此之前可以使用多对多关系。

以下是正在使用的视图(它是基于创建表单的视图):

def form_valid(self, form):
    context = self.get_context_data()
    self.object = form.save(commit=False)
    teamroster_formset = cp_forms.TeamRosterFormset(self.request.POST, instance=self.object)

    if teamroster_formset.is_valid():
        teamroster_formset.instance = self.object
        teamroster_formset.save()

我不知道发生了什么,我该怎么做......有什么想法吗?

谢谢, ARA

1 个答案:

答案 0 :(得分:0)

愚蠢的我......只需要从.save()方法中删除commit = false -.-