Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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 ORM获取实例的所有多对多字段_Python_Django_Django Orm - Fatal编程技术网

Python Django ORM获取实例的所有多对多字段

Python Django ORM获取实例的所有多对多字段,python,django,django-orm,Python,Django,Django Orm,我有一个模型项目,它与类别,专业,竞争对手有关系 我有一个实例这个模型的项目。我可以使用 模型域 object.\u元字段 这给了我模型中所有字段的名称;我只需重复这些,就可以检查用户是否更新了某些内容 我还想知道这个对象有哪些manytomy关系,而不是静态调用allproject.category\u set.all() 我想知道,是否有任何方法可以得到所有这些关系的列表,并对它们进行迭代,得到它们的值 目标 检查ManyToMany关系中的数据是否已由用户更新,或者是否特定于此实例 密码

我有一个模型
项目
,它与
类别
专业
竞争对手
关系

我有一个
实例
这个模型的
项目
。我可以使用

模型域
object.\u元字段

这给了我模型中所有字段的名称;我只需重复这些,就可以检查用户是否更新了某些内容

我还想知道这个对象有哪些
manytomy
关系,而不是静态调用all
project.category\u set.all()

我想知道,是否有任何方法可以得到所有这些关系的列表,并对它们进行迭代,得到它们的值

目标 检查
ManyToMany
关系中的数据是否已由用户更新,或者是否特定于此实例

密码
如何检查
竞争对手
数据是否已更新

也许你可以在这里使用信号()。你能详细说明一下吗?我需要在检查更改后做出决定。我可以检查模型中所有已更新的字段,但M2M数据仍然存在,我想发送一封电子邮件并存储一个日志文件,其中包含已更改字段的注释。对于信号,我可以用户预保存(但问题仍然是如何比较两个值)旧的和新的?如果我可以获得旧的值(我可以)和更新的表单值,那么我不需要信号。我也可以在FormInstance.Save()方法中实现这一点。您无法从模型中获取表单值(即使可以,这也不是一件好事),因为表单位于模型之上,反之亦然。虽然表单知道涉及的模型,但模型无法知道它是从表单还是其他对象调用的。这个检查应该在Form类内部完成,或者(正如Jingo所建议的)使用一个信号,该信号将实例作为参数,因此您可以将实例值与DB值进行比较。
def save(self, request, instance):
    project = super(RequestForm, self).save(commit=False)
    project.competitor.all() # Gives the list which is in data base (not new list form the form values.
    project.save()
    project.instance.save_m2m()
    project.competitor.all() # Gives the list which is in data base (With the changing have been made.