如何使通过多对多关系连接的模型在 Django admin 中同时在两个地方可编辑?
Posted
技术标签:
【中文标题】如何使通过多对多关系连接的模型在 Django admin 中同时在两个地方可编辑?【英文标题】:How to make models connected via ManyToMany relationship editable in two places at the same time in Django admin? 【发布时间】:2011-09-11 12:54:53 【问题描述】:我有两个模型 - 新闻和主题。新闻模型有一个与主题相关的 ManyToManyField,如下所示:
subjects = models.ManyToManyField(NewsSubject, verbose_name=u'Subjects', blank=True,null=True,related_name='news')
而且我不仅需要能够在管理员中为新闻选择主题,而且还需要在编辑主题时选择新闻。
我是从创建模型表单开始的:
class NewsSubjectForm(forms.ModelForm):
news = ModelMultipleChoiceField(queryset=News.objects.all(),
label="News",
required=False,
#initial=News.objects.all(),
)
class Meta:
model = NewsSubject
这是一个问题 - 我应该如何根据反向多对多关系指定新闻的初始值?以及如何添加加号按钮进行简单添加?
【问题讨论】:
【参考方案1】:我不确定它能否满足您的需求,但我已经通过使用 TabularInline 做了类似的事情。像这样的一些想法应该可以工作(我没有测试以下代码)。
class Subject(models.Model):
...
class News(models.Model):
subject = models.ManyToManyField(Subject, through="NewsSubject")
class NewsSubject(models.Model):
news = models.ForeignKey(News)
subject = models.ForeignKey(Subject)
class NewsOfSubjectInline(admin.TabularInline):
model = NewsSubject
raw_id_fields = ('news',)
class SubjectAdmin(admin.ModelAdmin):
inlines = [NewsOfSubjectInline,]
class SubjectOfNewsInline(admin.TabularInline):
model = NewsSubject
raw_id_fields = ('subject',)
class NewsAdmin(admin.ModelAdmin):
inlines = [SubjectOfNewsInline,]
【讨论】:
太棒了!对于友好的管理标签,请参阅 - ***.com/questions/4929009/…以上是关于如何使通过多对多关系连接的模型在 Django admin 中同时在两个地方可编辑?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过多对多字段(精确匹配)中的对象过滤 django 模型?