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
关系,而不是静态调用allproject.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.