Как я могу использовать метод модели django для упорядочивания в мета-классе

class Post(models.Model):
    title = models.CharField(max_length=255, verbose_name="ady")
    text = RichTextField(verbose_name="text")
    tagList = models.ManyToManyField(Tag, verbose_name="taglar", related_query_name="tagList")
    image = models.ImageField(upload_to="postImage/", verbose_name="surat")
    seen = models.ManyToManyField(UserId,verbose_name="görülen sany", blank=True, related_name="gorulen")
    like = models.ManyToManyField(UserId,verbose_name="like sany", blank=True)
    share = models.PositiveIntegerField(verbose_name="paýlaşylan sany", null=True, blank=True, default="0")
    createdAt = models.DateTimeField(auto_now_add=True, verbose_name="goşulan güni")

    class Meta:
        verbose_name_plural="Makalalar"
        # ordering = ("-createdAt",)
        ordering = ["-hotness",]

    def __str__(self):
        return self.title

    def likes(self):
        return self.like.count()

    likes.short_description = "Like sany"
    likes.allow_tags = True

    def seens(self):
        return self.seen.count()

    seens.short_description = "Görülen sany"
    seens.allow_tags = True

    @property
    def hotness(self):
        return self.likes() + self.seens() + self.share

Как я могу использовать значение функции hotness для упорядочивания в мета-классе

Свойство hotness, которое вы определили с помощью декоратора @property, использует два метода, likes и seens, которые используются для возврата количества связанных объектов. Однако эти методы возвращают количество связанных объектов путем вызова метода count на менеджере связанных объектов, который возвращает целое число.

Свойство hotness должно просто возвращать сумму подсчета связанных объектов, а не вызывать методы likes и seens так:

class Post(models.Model):
    # ... other fields ...
    
    @property
    def hotness(self):
        return self.like.count() + self.seen.count() + self.share
    
    class Meta:
        verbose_name_plural="Makalalar"
        ordering = ["-hotness",]
Вернуться на верх