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?
答
就个人而言,我会把多对多的事件来开始的,但每一个自己...
至于如何做到这一点,你会想编写一个自定义的ModelForm(没有内嵌的formset ),我们称之为EventForm。它可以处理所有事件的字段,并且还会有一个ModelChoiceField或ModelMultipleChoiceField以允许选择涉及的Actor。然后在您的视图中,您将拆分事件字段和ForeignKey/M2M字段的处理。
'Event'中涉及多少个'Actor'?从我的感觉来看,我首先会创建一个从'Event'到'Actor'的外键。 – 2010-03-23 20:24:29
我明白你的观点,但我认为多对多是正确的。不止一个演员可以参加一个活动,而演员可以参加多个活动。 – 2010-03-23 22:06:15