我的Django应用程序中有以下(简化)模型:
class Color(models.Model):
name = models.CharField(max_length=10)
class Item(models.Model):
name = models.CharField(max_length=200)
color = models.ForeignKey(Color, blank=True, null=True)
class Favorite(models.Model):
user = models.ForeignKey(User)
item = models.ForeignKey(Item)
我目前正在使用以下查询获取所需的所有项目:
favorites = Favorite.objects.filter(user=request.user)
如何获取QuerySet
项目的所有不同颜色?
我需要一个实际颜色对象的列表,而不仅仅是颜色ID,我可以使用
favorites.values_list('item__color').distinct
答案 0 :(得分:29)
如果我理解正确,以下应该可以解决问题:
favorites = Favorite.objects.filter(user=request.user)
color_ids = favorites.values_list('item__color', flat=True).distinct()
colors = Color.objects.filter(id__in=color_ids)
尽管如此,必须有一种更清洁的方式。
编辑:更清洁的解决方案:
colors = Color.objects.filter(item__favorite__user=request.user).distinct()
答案 1 :(得分:6)
你能做到:
Color.objects.filter(item__favorite__user = request.user).distinct()
如果这些不是默认设置,您可能需要在外键上设置一些related_name
(我永远不会记住默认设置)。
答案 2 :(得分:3)
你能做到:
favorites = Favorite.objects.filter(user=request.user).distinct('item__color')
答案 3 :(得分:0)
这是values_list(*fields, flat=False, named=False)
方法,因此请在您的对象上运行它,例如:
user.groups.values_list('name', flat=True)