一个模型(periodiccertification)通过foreignkey链接到另一个模型(assets)。此定期模型还通过foreignkey(空白和null为true)链接,以访问另一个模型(项目条件)的m2m关系(资产)。
db中的相关认证领域:
项目条件的m2m关系:
问题是:
保存项目条件时,periodiccertification模型中的所有资产只需要通过一个字段更新:projectconditions_id(foreignkey)。这样就可以过滤与项目条件批次相关的所有资产。
可以通过覆盖save_model()来完成,还是需要不同的信号?因此,我每次提交项目条件时都要完成的工作是:
每个 .projectconditions.assets.asset_id 的等于 periodiccertification.asset_id:
更新 processes.periodiccertification.projectconditions_id with projects.projectsconditions_id
有人知道在保存期间执行此操作的pythonic方法(可能是您要保存的资产尚未存在的问题吗?)或某种post_save函数期间?
尝试学习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()
答案 0 :(得分:0)
您可以使用Django的update函数进行所需的更改。
所以在你的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)
[x.id for x in self.assets.all()]
应该为您提供当前实例的资产ManyToMany与资产的关系中所有asset_id
的列表。然后,您仅针对PeriodicCertification
与列表中的匹配的实例过滤asset_id
模型。最后,您使用update
将projectconditions_id
字段设置为当前实例的ID。
我试图弄清楚正确的细节,但如果没有希望它会指出你正确的方向。