【发布时间】:2017-08-02 01:29:33
【问题描述】:
这是我的模型:
class Item(models.Model):
title = models.TextField()
class Storage(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
rating = models.IntegerField(blank=True, null=True)
review = models.CharField(max_length=1500, blank=True, null=True)
class SocialProfile(models.Model):
user = models.OneToOneField(User, unique=True)
follows = models.ManyToManyField('self', related_name='followed_by', symmetrical=False)
假设有 4 个用户 A、B、C、D。用户 A 只关注 B 和 C。 我正在尝试查看以用户 A 身份登录时的视图。显示 B 和 C 拥有的项目列表(重复项仅显示一次)。在每个项目下,显示他们的总结和评级。
我这里有东西:(user = User A here)
//get a list of users that User A follows
followings = user.socialprofile.follows.all()
//get B and C's saved item, eliminate the duplicates
context['following_saved_article'] = Item.objects.filter(storage__user__in=followings.values('user')).distinct()
//get a flat list of all users A follows
context['followings'] = list(followings.values_list('user', flat=True).order_by('user'))
然后在模板中:
{% for item in following_saved_item %}
{{ item.title }}
{% for x in item.storage_set.all %}
{% if x.user_id in followings %}
{{ x.review }} {{ x.rating }}
{% endif %}
{% endfor %}
{% endfor %}
这似乎太多余了,如果我想按用户评分对评论进行排序,我将非常困难。
有没有办法生成一个不同的 Item 实例列表,仅根据关注获取 storage_set,按评级或存储中的其他字段排序,然后将其传递给查看?谢谢
【问题讨论】:
标签: django many-to-many django-queryset