我创建了一个关于item_buy data的特性
这是我的ORM类class BuyData(models.Model):
buy_count = models.IntegerField(default=0)
refund_count = models.IntegerField(default=0)
refund_rate = models.FloatField(default=0.0, help_test='refund_count / buy_count')
当我创建一个关于refund
的函数时,我想更新我的BuyData模型
def refund():
buy_data_queryset.update(
refund_count = F('refund_count') + 1
)
buy_data_queryset.update(
refund_rate = F('refund_count') / F('buy_count') * 100
)
但我认为这种方式是不好的,因为当这个函数调用很多时间每秒,可能这两步查询提出一些问题…
所以我找到了一些文档,并像这样修改
def refund():
with transaction.atomic():
buy_data_queryset.update(
refund_count = F('refund_count') + 1
)
buy_data_queryset.update(
refund_rate = F('refund_count') / F('buy_count') * 100
)
我认为这种方式是好的。但是我想知道如何只用一个查询就能解决这个问题
我知道这不是一个解决方案
def refund():
# not a solution
# because if refund_count is 100 and buy_count is 1000
# i want to change my refund_rate = 101 / 1000
# not 100 / 1000
buy_data_queryset.update(
refund_count = F('refund_count') + 1
refund_rate = F('refund_count') / F('buy_count') * 100
)
请给我一些建议谢谢:))
您可以一次更新多个字段:
>>> Entry.objects.filter(pub_date__year=2010).update(comments_on=False, headline='This is old')
https://docs.djangoproject.com/en/3.0/ref/models/querysets/更新或者
buy_data_queryset.update(
refund_count = F('refund_count') + 1,
refund_rate = F('refund_count') / F('buy_count') * 100
)