Django Admin:在多对多关系中将<select multiple =“”>添加到* other *模型</select>

时间:2012-11-20 13:35:04

标签: python django django-admin

我的应用在ToolsTasks之间存在多对多关系。现在,在Task模型上定义了多对多关系,这样在管理员的Task编辑页面中,我有一个<select multiple>控件,允许您选择0或更多ToolsTask相关联。

我知道Django不允许您在两个模型上定义关系,但是仍然可以告诉管理员在<select multiple>编辑页面上添加Tool吗?我希望能够从它的任何一侧编辑关系。

3 个答案:

答案 0 :(得分:1)

这样的事情应该有效(给定m2m在Tool中指定):

# 1st app
from secondapp.models import Tool

class Task(models.Model):
    tools = models.ManyToManyField(Tool, through=Tool.tasks.through)

# 2nd app
class Tool(models.Model):
    tasks = models.ManyToManyField("firstapp.Task")

答案 1 :(得分:0)

您可以尝试在ToolsTasks之间创建一个虚拟模型,作为中介,Django通常提供用于存储特定关系的额外信息的模型。在创建此through=关系时,您可以使用ManyToMany关键字来使用它。

您可以找到有关here的详细信息。

我实际上并没有在管理页面上看过它,但我会想象一旦你在管理页面上注册模型,因为该模型与的每个<{1}}关系 of ForeignKeyTools,您应该可以从虚拟模型中编辑双方的关系。

但是,我不一定会推荐这个,除非你能够访问双方的关系是非常必要的。

答案 2 :(得分:0)

为了让管理员看起来很好,我不会使用through或使您的模型复杂化。您也可以尝试creating an admin inline。使用内联,您可以在管理应用程序中的任何模型屏幕上添加子部分。文档中有一些很好的例子。