我有自定义模型管理器,它重写create
方法。目标模型有order_nbr
字段,它表示项的顺序。我想将order_nbr
的最大值增加1。这里的关键是最大值应该与groupby结合起来。请看一下我的代码(它仍然会受到比赛条件的影响):
class ContentOnPageModelManager(models.Manager):
def create(self, **kwargs):
if 'order_nbr' not in kwargs:
try:
order_nbr = ContentOnPage.objects.filter(page=kwargs['page']).latest('order_nbr').values('order_nbr')[0]
except ContentOnPage.DoesNotExist:
order_nbr = 0
# TODO (dmitry): race condition
kwargs['order_nbr'] = order_nbr + 1
return super().create(**kwargs)
class ContentOnPage(models.Model):
page = models.ForeignKey('Page', on_delete=models.CASCADE)
video = models.ForeignKey('Video', null=True, on_delete=models.SET_NULL)
audio = models.ForeignKey('Audio', null=True, on_delete=models.SET_NULL)
text = models.ForeignKey('Text', null=True, on_delete=models.SET_NULL)
order_nbr = models.PositiveIntegerField(default=0)
如何用以下代码替换该代码:
kwargs['order_nbr'] = F(GROUP_BY('page').MAX('order_nbr')) + 1
^^^这更像是伪代码
目前没有回答
相关问题 更多 >
编程相关推荐