Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django管理员:添加<;选择多个>;多对多关系中的“其他”模型_Python_Django_Django Admin - Fatal编程技术网

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")