Django的形式由许多连接2种型号众多领域

Django的形式由许多连接2种型号众多领域

问题描述:

我有两个型号:Django的形式由许多连接2种型号众多领域

class Actor(models.Model): 
    name = models.CharField(max_length=30, unique = True) 
    event = models.ManyToManyField(Event, blank=True, null=True) 

class Event(models.Model): 
    name = models.CharField(max_length=30, unique = True) 
    long_description = models.TextField(blank=True, null=True) 

我想创建一个表格,让我找出两个模型之间的联系,当我添加新条目。这个作品:

class ActorForm(forms.ModelForm): 
    class Meta: 
      model = Actor 

该表格包括名称和事件,允许我创建一个新的Actor并同时链接到一个现有的事件。

在另一面,

class EventForm(forms.ModelForm): 
    class Meta: 
      model = Event 

这种形式不包括演员协会。所以我只能创建一个新的事件。我不能同时将它链接到现有的演员。

我试图创建一个内联表单集:

EventFormSet = forms.models.inlineformset_factory(Event, 
     Actor, 
     can_delete = False, 
     extra = 2, 
     form = ActorForm) 

,但我得到一个错误

<'class ctg.dtb.models.Actor'> has no ForeignKey to <'class ctg.dtb.models.Event'> 

这也不算稀奇。 inlineformset适用于另一组模型,但这是一个不同的例子。我想我完全错了。

总体问题:如何创建一个表单,允许我创建一个新的事件并将其链接到现有的Actor?

+0

'Event'中涉及多少个'Actor'?从我的感觉来看,我首先会创建一个从'Event'到'Actor'的外键。 – 2010-03-23 20:24:29

+1

我明白你的观点,但我认为多对多是正确的。不止一个演员可以参加一个活动,而演员可以参加多个活动。 – 2010-03-23 22:06:15

就个人而言,我会把多对多的事件来开始的,但每一个自己...

至于如何做到这一点,你会想编写一个自定义的ModelForm(没有内嵌的formset ),我们称之为EventForm。它可以处理所有事件的字段,并且还会有一个ModelChoiceFieldModelMultipleChoiceField以允许选择涉及的Actor。然后在您的视图中,您将拆分事件字段和ForeignKey/M2M字段的处理。

有意义吗? alt text http://sonicloft.net/im/52