Django -如何使用子模型更新父模型?

a5g8bdjr  于 2023-02-05  发布在  Go
关注(0)|答案(1)|浏览(126)

我有两个模型,大概是这样的:
models.py

class Parent(models.Model):
  id = models.BigAutoField(primary_key=True)
  quantity = models.DecimalField(max_digits=3, decimal_places=0, null=True)

class Child(models.Model):
  parent = models.ForeignKey('Parent', related_name="parent_child", on_delete=models.CASCADE)
  quantity = models.DecimalField(max_digits=3, decimal_places=0, null=True)

如果父数量与子数量之和不同,则将父数量更新为子数量之和。
我尝试获取一个父数量与子数量之和不同的对象:

parent = Parents.objects.annotate(sum_quantities=Sum('parent_child__quantity')).exclude(quantity=F('sum_quantities'))

可以!但是我更新这个有问题。有什么好办法吗?

kpbwa7wx

kpbwa7wx1#

我解决了。

Parent.objects.annotate(
    sum_quantities=Sum('parent_child__quantity')).exclude(quantity=F('sum_quantities')).update(
        quantity=Subquery(
            Parent.objects.filter(parent=OuterRef('id')).annotate(sum_quantities=Sum('parent_child__quantity')).values('sum_quantities')[:1]    
        )
    )
)

相关问题