Django 模型 ManytoMany getter

Posted

技术标签:

【中文标题】Django 模型 ManytoMany getter【英文标题】:Django model ManytoMany getters 【发布时间】:2012-04-12 15:46:36 【问题描述】:

我想通过 ManyToMany 和模型 B 获取与模型 A 关联的对象列表,例如食客 (A) 确认参加用餐 (B)。但我不确定我应该使用什么吸气剂。我实际上想这样做是为了在管理面板中显示关联的对象。下面的方法是我做的一次失败的尝试。

class Meal(models.Model):
    diners = models.ManyToManyField(User, through='Attendance', related_name="eating", blank=True)

    def diners(self):
        return self.eating

你能帮忙吗? 谢谢

【问题讨论】:

self.diners.all() 是你需要的吗? 【参考方案1】:

按照 ilvar 的建议,删除 diners 方法并使用 self.diners.all() 获取 Meal 方法中的对象。 related_name='eating' 用于获取用户的用餐,相反。

【讨论】:

感谢您的回复。所以在 Meal 模型中,我输入:def eating(self): return self.diners.all() 并在 MealAdmin 文件中输入:class MealAdmin(admin.ModelAdmin): list_display = ('summary', 'when', 'host', 'url', 'diners') pass admin.site.register(Meal, MealAdmin) 这给了我错误:异常类型:不正确配置的异常值:'MealAdmin.list_display[4]','diners ' 是不受支持的 ManyToManyField。 @user77510 list_display 不支持多对多字段。如果你想在admin change_list中显示晚餐字段的项目,你需要编写一些方法来直接渲染列的内容,参考docs.djangoproject.com/en/dev/ref/contrib/admin/… 是的,我已经看到了,这就是这个线程的开始方式。我尝试按照上述方法制作该方法,并根据您上面的方法,但后来我遇到了上述情况。那个方法好像不行。你怎么看?谢谢 @user77510 只输出你想要的html sn-p。例如,按他们的 __unicode__ 显示所有晚餐将是“return ','.join(map(unicode, self.diners.all()))”。如果您仍然感到困惑,您可以提出一个关于实现该方法的方式的新问题。【参考方案2】:

我到达此页面时遇到了与 OP 相同的问题。我最终只是在我的管理模型中删除了对 list_display 中的 ManyToMany 字段的引用。结果:在该应用程序的管理页面上,在 ManyToMany 字段名称下,出现了一个格式精美的多选列表小部件,其中显示了我的 ManyToMany 关系的可能值。

所以解决方案是删除list_display 中的引用并让Django 处理它。这是 Django 1.4.3。

【讨论】:

以上是关于Django 模型 ManytoMany getter的主要内容,如果未能解决你的问题,请参考以下文章

django ManyToMany 模型视图和模板

Django在ManyToMany计数上过滤模型?

django 模型:如何克服“通过”ManyToMany 选项限制

Django ORM - 模型引用另一个模型ManyToMany字段

保存自定义用户模型时 Django ManyToMany 覆盖

当嵌套序列化程序中有另一个模型(manytomany)时,如何在 django 模型上发布,我想同时创建两者