Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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 保存时更新其他模型中所有m2m条目的foreignkey字段_Python_Django - Fatal编程技术网

Python 保存时更新其他模型中所有m2m条目的foreignkey字段

Python 保存时更新其他模型中所有m2m条目的foreignkey字段,python,django,Python,Django,一个模型(periodiccertification)由外键链接到另一个模型(assets)。该周期模型还通过一个foreignkey(blank和null true)链接,以访问另一个模型(projectconditions)的m2m关系(资产) db中周期认证的相关字段: 项目条件的m2m关系: 问题是: 保存projectconditions时,periodiccertification模型中的所有资产只需更新一个字段:projectconditions\u id(外键)。通过这种方式

一个模型(periodiccertification)由外键链接到另一个模型(assets)。该周期模型还通过一个foreignkey(blank和null true)链接,以访问另一个模型(projectconditions)的m2m关系(资产)

db中周期认证的相关字段:

项目条件的m2m关系:

问题是:

保存projectconditions时,periodiccertification模型中的所有资产只需更新一个字段:projectconditions\u id(外键)。通过这种方式,可以筛选与projectconditions批处理相关的所有资产

这可以通过覆盖save_model()来实现,还是需要不同的信号?因此,每次提交projectconditions表单时,我都试图完成以下任务:

对于每个等于periodiccertification.asset\u id的项目条件.assets.asset\u id

使用projects.projectsconditions\u id更新processs.periodiccertification.projectconditions\u id

是否有人知道在保存时(可能是您要保存的资产还没有出现问题)或在某种post_save函数期间使用python方法来执行此操作

尝试学习python(初级),但希望下面的尝试进一步说明其含义:

def save_model(self, request, obj, form, change):
"""obtain all entries in Periodic Certification Model that has the same asset_id as in m2m"""
certification_asset = PeriodicCertification.objects.get(asset_id=assets.asset_id)
""""save the current projectconditions"""
for asset_id in certification_assets:
        certification_asset.projectconditions_id = obj.id
    obj.save() 

您可能可以使用Django的函数进行所需的更改

因此,在您的
ProjectConditions
模型中:

def save(self, *args, **kwargs):
    super(ProjectConditions, self).save(*args, **kwargs)
    PeriodicCertification.objects.filter(asset_id__in=[x.id for x in self.assets]).update(projectconditions_id=self.id)
self.assets.all()]中的
[x.id for x应该为您提供当前实例的资产中与资产有许多关系的所有
资产id
s的列表。然后,您将筛选您的
PeriodicCertification
模型,只筛选与列表中的实例匹配的
asset\u id
。最后,使用
update
projectconditions\u id
字段设置为当前实例的id


我试着把细节弄对,但如果没有,希望它能为您指明正确的方向。

您可能可以使用Django的函数来进行所需的更改

因此,在您的
ProjectConditions
模型中:

def save(self, *args, **kwargs):
    super(ProjectConditions, self).save(*args, **kwargs)
    PeriodicCertification.objects.filter(asset_id__in=[x.id for x in self.assets]).update(projectconditions_id=self.id)
self.assets.all()]
中的
[x.id for x应该为您提供当前实例的资产中与资产有许多关系的所有
资产id
s的列表。然后,您将筛选您的
PeriodicCertification
模型,只筛选与列表中的实例匹配的
asset\u id
。最后,使用
update
projectconditions\u id
字段设置为当前实例的id


我试图把细节弄清楚,但如果没有,希望它能为你指明正确的方向。

你能在这里发布你的模型吗?你能在这里发布你的模型吗。