【发布时间】:2021-10-21 07:42:06
【问题描述】:
当使用save()函数循环模型中的queryset和更新字段时,尝试对更新的查询集进行过滤,即使查询集中仍有满足条件的元素,过滤结果也会返回空。
请检查下面的代码。
qs = queryset.filter(status=models.BankTransfer.STATUS_NEW)
for bank_transfer in qs:
bank_transfer.status = models.BankTransfer.STATUS_APPROVED
bank_transfer.save()
顺便说一句,当我打印qs 时,它会返回结果,但我尝试使用first() 获取第一个对象,它返回无
for bank_transfer in qs.filter(purpose__status='pending_completed'):
bank_transfer.purpose.status = 'completed'
bank_transfer.purpose.save()
银行转账模式:
class BankTransfer(models.Model):
swift_code = models.CharField(max_length=200, blank=False, verbose_name=_('SWIFT'))
user = models.ForeignKey(User, blank=False, null=True, on_delete=models.SET_NULL)
amount = models.DecimalField(blank=False, default=D('0'), max_digits=11, decimal_places=2, verbose_name=_('Amount'))
purpose = models.ForeignKey('auction.Purpose', blank=True, null=True, on_delete=models.SET_NULL)
status = models.CharField(max_length=200, blank=False, null=False, choices=STATUS_CHOICES, verbose_name=_('Status'))
用途型号:
class Purpose(models.Model):
status = models.CharField(max_length=200, blank=False, null=True, choices=STATUS_CHOICES, verbose_name=_('Status'))
bla
bla
【问题讨论】:
-
您将所有项目状态从
STATUS_NEW设置为STATUS_APPROVED,因此当您执行qs.filter(..)时,它是空的,因为STATUS_NEW已经没有项目了。 -
你能分享相关的模型吗(可能是
BankTransfer和Purpose模型。 -
@WillemVanOnsem 确定一分钟
-
我添加了模型