我的应用在Tools
和Tasks
之间存在多对多关系。现在,在Task
模型上定义了多对多关系,这样在管理员的Task
编辑页面中,我有一个<select multiple>
控件,允许您选择0或更多Tools
与Task
相关联。
我知道Django不允许您在两个模型上定义关系,但是仍然可以告诉管理员在<select multiple>
编辑页面上添加Tool
吗?我希望能够从它的任何一侧编辑关系。
答案 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)
您可以尝试在Tools
和Tasks
之间创建一个虚拟模型,作为中介,Django通常提供用于存储特定关系的额外信息的模型。在创建此through=
关系时,您可以使用ManyToMany
关键字来使用它。
您可以找到有关here的详细信息。
我实际上并没有在管理页面上看过它,但我会想象一旦你在管理页面上注册模型,因为该模型与的每个<{1}}关系 of ForeignKey
和Tools
,您应该可以从虚拟模型中编辑双方的关系。
答案 2 :(得分:0)
为了让管理员看起来很好,我不会使用through
或使您的模型复杂化。您也可以尝试creating an admin inline。使用内联,您可以在管理应用程序中的任何模型屏幕上添加子部分。文档中有一些很好的例子。