This commit is contained in:
@@ -142,12 +142,19 @@ class Topic(models.Model):
|
||||
order = models.IntegerField(default=0, verbose_name="排序")
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
# 记录是否为新对象,因为super().save后pk就有了
|
||||
is_new = self.pk is None
|
||||
|
||||
# 第一次保存,先入库
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
# 如果是新创建,且 order 默认为 0(未指定)
|
||||
if is_new and getattr(self, 'order', 0) == 0:
|
||||
# 默认使用 -id 作为排序值,确保新帖子默认排在前面(order越小越靠前)
|
||||
Topic.objects.filter(pk=self.pk).update(order=-self.pk)
|
||||
self.order = -self.pk
|
||||
# 将所有其他帖子的 order + 1,腾出 0 的位置
|
||||
Topic.objects.exclude(pk=self.pk).filter(order__gte=0).update(order=models.F('order') + 1)
|
||||
# 确保自己是 0
|
||||
Topic.objects.filter(pk=self.pk).update(order=0)
|
||||
self.order = 0
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
Reference in New Issue
Block a user