Python Django管理员:添加<;选择多个>;多对多关系中的“其他”模型
在我的应用程序中,Python Django管理员:添加<;选择多个>;多对多关系中的“其他”模型,python,django,django-admin,Python,Django,Django Admin,在我的应用程序中,工具和任务之间存在多对多关系。现在,多对多关系是在任务模型上定义的,因此在管理员的任务编辑页面中,我有一个控件,允许您选择0个或多个工具与任务关联 我知道Django不允许您在这两个模型上定义关系,但是否仍然可以告诉管理员在工具编辑页面上也包含?我希望能够从任意一侧编辑关系。类似的功能应该可以正常工作(给定m2m在工具中指定): 类似的方法应该可以工作(给定m2m在工具中指定): 您可以尝试在工具和任务之间创建一个充当中介的虚拟模型,Django通常提供该模型用于存储有关特定关
工具
和任务
之间存在多对多关系。现在,多对多关系是在任务
模型上定义的,因此在管理员的任务
编辑页面中,我有一个
控件,允许您选择0个或多个工具
与任务
关联
我知道Django不允许您在这两个模型上定义关系,但是否仍然可以告诉管理员在
工具
编辑页面上也包含
?我希望能够从任意一侧编辑关系。类似的功能应该可以正常工作(给定m2m在工具中指定):
类似的方法应该可以工作(给定m2m在工具中指定):
您可以尝试在工具
和任务
之间创建一个充当中介的虚拟模型,Django通常提供该模型用于存储有关特定关系的额外信息。在创建这个manytomy
关系时,您可以使用through=
关键字来利用它
你可以找到这方面的细节
实际上,我没有在管理页面上查看它,但我可以想象,一旦您在管理页面上注册了模型,因为该模型与每个工具和任务都有关系,您应该能够从虚拟模型中编辑双方的关系
不过,我不一定推荐这样做,除非您能够访问双方的关系是非常重要的。您可以尝试在工具
和任务
之间创建一个虚拟模型,作为中介,Django提供的东西,通常用于存储关于特定关系的额外信息。在创建这个manytomy
关系时,您可以使用through=
关键字来利用它
你可以找到这方面的细节
实际上,我没有在管理页面上查看它,但我可以想象,一旦您在管理页面上注册了模型,因为该模型与每个工具和任务都有关系,您应该能够从虚拟模型中编辑双方的关系
不过,我不一定推荐这样做,除非您能够访问双方的关系是非常重要的。我不会通过使用或仅仅为了让管理员看起来很好而使您的模型复杂化。你也可以试试。使用内联线,您可以在管理应用程序中向任何模型的屏幕添加子部分。文档中有一些很好的例子。我不会通过
使用,也不会为了让管理员看起来很好而使模型复杂化。你也可以试试。使用内联线,您可以在管理应用程序中向任何模型的屏幕添加子部分。文档中有一些很好的例子。您可以编辑管理表单(set)并扩展保存方法吗?“选择多个”只是一个小部件,没有什么特别的功能。您可以编辑管理表单(集合)并扩展保存方法吗?“选择多个”只是一个小部件,没有什么特别之处。我的两个型号在两个不同的应用程序中,那么您如何避免使用此功能进行循环导入?(顺便说一句,这是任务和工具,而不是标签和工具。)我更新了答案以处理不同的应用程序和命名:)没有尝试,但我认为这应该有效。这是一个好主意,但对我来说不起作用。m2m是在Task中定义的,根据您的逻辑,这意味着我应该将app1.Task的导入移动到app2.models中。但是,app1在其他地方也引用了app2.Tool,因此我无法按照您的建议移动导入。我的两个模型位于两个不同的应用程序中,因此您如何避免使用此工具进行循环导入?(顺便说一句,这是任务和工具,而不是标签和工具。)我更新了答案以处理不同的应用程序和命名:)没有尝试,但我认为这应该有效。这是一个好主意,但对我来说不起作用。m2m是在Task中定义的,根据您的逻辑,这意味着我应该将app1.Task的导入移动到app2.models中。但是,app1在其他地方也引用了app2.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")