2012-03-16 60 views
2

我得到了這樣的模型:Django的:拯救許多一對多的形式

客人:

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. 如何定義表單編輯會議的嘉賓名單(邀請嘉賓 - 以後我們將用它來發送短信邀請 - 沒有垃圾郵件,客人都幾乎我們的朋友;))。

  2. 每位客人都有(經理= models.ForeignKey(經理))。我怎麼能修改此表(或這些模型),允許管理員邀請只鏈接到他們的客人(與外鍵)?

回答

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。

+0

inlineformset_factory需要2個參數:)第二個是什麼? – 2012-03-16 13:18:51

+0

@ ns-keip:對不起,它的父模型。更新。 – 2012-03-16 13:39:19