У меня проблемы с созданием фильтра в одном из моих просмотров.Я создаю сайт с записями в блогах, новостными статьями и обзорами.Записи и статьи имеют общие отношения с рецензиями, потому что рецензии могут пометить любой из них.Я пытаюсь отсортировать записи / статьи на основе суммы оценок отзывов новее определенной даты .
Вотупрощенные модели:
class Entry(models.Model):
name = models.CharField(max_length=50)
reviews = generic.GenericRelation(Review)
class Article(models.Model):
name = models.CharField(max_length=50)
reviews = generic.GenericRelation(Review)
class Review(models.Model):
rating = models.IntegerField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
target = generic.GenericForeignKey('content_type', 'object_id')
timestamp = models.DateTimeField(auto_now_add=True)
Итак, учитывая, что мне нужно было найти сумму, я попытался использовать аннотирование и агрегирование, но столкнулся с двумя проблемами.Во-первых, очевидно, что родовые отношения и аннотации не очень хорошо работают вместе: https://code.djangoproject.com/ticket/10461. Во-вторых, я не думаю, что возможно суммировать только часть обзоров (в данном случае с timestamp__gte =datetime.now ()).Я делаю это неправильно?
Я также думал о том, чтобы сделать это наоборот:
Review.filter(timestamp__gte=datetime.now(), target__in=something).aggregate(Sum('rating'))
Но так как я пытаюсь заказать обзоры, основанные на этом, неt Мне нужно начать с Review.something, чтобы я мог использовать order_by?
Спасибо.