我正在尝试为具有队列验证的项目实施等候室。
一般的想法是将物品放入等候室,计算它的计数器(定义需要多少新物品来确认此物品的值),在添加每个新物品后减少它,最后在将计数器减少到零以下后确认它。如果等候室中已经有物品,则计算出的计数器会增加上一个物品的计数器,因此物品在队列中。
我的实现非常简单,但我发现这个解决方案非常快。但是引用上一个项目对我不起作用,我找不到原因 - 它经常从 Waiting 对象返回“随机”(或至少不是最后一个)值。
这是重要的代码片段:
class Waiting(models.Model):
item = models.ForeignKey(Item)
counter = models.FloatField(default=0)
(...)
def clearup(self):
(...) #here is decrementing and confirming part - it's working fine
def save(self, update=False):
if update:
return super(Waiting, self).save()
item = self.item
self.clearup()
(...) #nothing important
self.counter = item.quantity * items_list[item.name][1]
last = Waiting.objects.exclude(
item__name="Something I don't want here").order_by('-pk')
if last:
last = last[0]
weight = items_list[last.item.name][1]
self.counter += (last.item.quantity * weight)
super(Waiting, self).save()
编辑:我是智障。