Django:在表单中保存多对多

时间:2012-03-16 11:00:07

标签: python django many-to-many

我有这样的模特:

客人:

class Guest(models.Model):
    name = models.CharField(max_length=255)
    phone = models.CharField(max_length=255)
    # ...

和会议:

class Meeting(models.Model):
    # some fields ...
    guests = models.ManyToManyField(through='GuestOnMeeting')

很多客人都可以参加会议。一位客人可以参加很多会议。我们将存储一些额外的信息。因此,通过某种模式,它是多对多的。

class GuestOnMeeting(models.Model):
    guest = models.ForeignKey(Guest)
    meeting = models.ForeignKey(Meeting)

    # ... some other fields

问题是:

  1. 如何定义表单以编辑会议的访客列表(邀请访客 - 稍后我们将使用它发送短信邀请 - 没有垃圾邮件,访客几乎是我们的朋友;)。

    < / LI>
  2. 每位客人都有经理(经理= models.ForeignKey(经理))。如何修改此表单(或这些模型)以允许管理员仅邀请链接到它们的访客(使用外键)?

1 个答案:

答案 0 :(得分:2)

如果你想要管理员内联,你正在寻找inlineformset_factory

>>> from django.forms.models import inlineformset_factory
>>> GuestOnMeetingInline = inlineformset_factory(GuestOnMeeting, Meeting)
>>> meeting = Meeting.objects.all()[0]
>>> form = MeetingForm(instance=meeting)
>>> formset = GuestOnMeetingInline(instance=meeting)

您可以添加fields或将自定义forms和/或querysets传递给modelformset_factory。