首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django表单通过多对多领域链接2个模型

Django表单通过多对多领域链接2个模型
EN

Stack Overflow用户
提问于 2010-03-24 04:11:34
回答 1查看 1.5K关注 0票数 3

我有两个模型:

代码语言:javascript
运行
复制
 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)

我想创建一个表单,它允许我在添加新条目时识别两个模型之间的链接。这是可行的:

代码语言:javascript
运行
复制
 class ActorForm(forms.ModelForm):
     class Meta:
           model = Actor

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

从另一方面来说,

代码语言:javascript
运行
复制
 class EventForm(forms.ModelForm):
     class Meta:
           model = Event

此表单不包括执行元关联。所以我只能创建一个新事件。我不能同时将它链接到现有的Actor。

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

代码语言:javascript
运行
复制
 EventFormSet = forms.models.inlineformset_factory(Event,
       Actor,
       can_delete = False,
       extra = 2,
       form = ActorForm)

但是我得到了一个错误

代码语言:javascript
运行
复制
<'class ctg.dtb.models.Actor'> has no ForeignKey to <'class ctg.dtb.models.Event'>

这并不太令人惊讶。inlineformset适用于我的另一组模型,但这是一个不同的示例。我想我这样做是完全错误的。

总体问题:如何创建允许我创建新事件并将其链接到现有参与者的窗体?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-24 15:09:39

就我个人而言,我一开始会把ManyToMany放在活动上,但对于每个人来说都有自己的……

至于如何做到这一点,您可能想要编写一个自定义ModelForm (而不是内联formset),让我们称其为EventForm。它将处理事件的所有字段,并且还将具有ModelChoiceFieldModelMultipleChoiceField以允许选择所涉及的参与者。然后在您的视图中,您将拆分Event字段和ForeignKey/M2M字段的处理。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2503243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档