【问题标题】:Django - Inline formset and many-to-many relationshipDjango - 内联表单集和多对多关系
【发布时间】:2014-08-01 21:15:23
【问题描述】:

所以我有 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')

因此,当管理员创建团队时,我希望他们直接添加玩家。所以我创建了一个内联表单集。这是我的 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)

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

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

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()

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

谢谢, 阿拉

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-27
      • 2011-09-29
      • 2015-02-28
      • 2011-06-10
      • 2010-12-15
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多