Используя django и django-голосующее приложение, как я могу заказать queryset согласно голосам каждого объекта?

(Я плохо знаком с Python и django, поэтому терпите меня в течение секунды. Я приношу извинения, ответили ли этому в другом месте и не могло бы найти его),

Скажем, у меня есть модель Link, и через django-голосующих пользователей приложения может голосовать по экземплярам ссылки. Как я могу заказать те экземпляры ссылки согласно их счету, например, отобразить тех, которые имеют более высокий счет сначала.

Я предполагаю, что мог использовать get_top менеджера django-голосования, но это только приведет мне главные примеры ссылки выигрыша и не учло бы другие параметры, которые я хотел бы добавить (например, те ссылки, которые принадлежат определенному пользователю или подкачке страниц или безотносительно).

Мое предположение должно было бы записать пользовательскому менеджеру для моей модели Link, где я могу отфильтровать queryset согласно счету каждого объекта. Если я понимаю правильно, что это потребует, чтобы я циклично выполнился через каждый объект, проверил его счет и затем поместил его список (или словарь), который будет затем отсортирован согласно счету каждого объекта. Это не возвратило бы queryset, но словарь с каждым объектом.

Я пропускаю что-то здесь?

править:

Вот упрощенная версия модели Link:

class Link(models.Model):
    user = models.ForeignKey('auth.User')
    category = models.ForeignKey(Category)  
    date = models.DateTimeField( auto_now_add=True, null=True, blank=True )
    is_deleted = models.BooleanField(default=False, blank=True)
    links = ValidLinkManager()
    objects = models.Manager()

и когда пользователь голосует за то, чтобы у меня было это, по моему мнению:

Vote.objects.record_vote(link, user, vote)

где ссылка является экземпляром Ссылки, пользователь является экземпляром подлинного пользователя, и голосование или 1, 0, или-1. ValidLinkManager просто отфильтровывает те ссылки, которые имеют набор is_deleted к Истинному.

6
задан Nicolas R 17 May 2010 в 12:15
поделиться

1 ответ

Метод get_top в VoteManager не так уж и сложен. Посмотрите его код (в manager.py:122). Вы можете легко создать его версию, которая принимает фильтр в качестве другого параметра и применяет его к набору запросов «объекты» после его создания в строке 158 - таким образом вы можете добавить другие фильтры, подобные тем, которые вам не хватает.

Может быть, вы также можете предложить это в качестве патча для jonathan, и он поместит его в django-vote :)

1
ответ дан 17 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: