2011-09-28 100 views
14
獲得唯一對象名單

我有以下的(簡化)模型在我的Django應用程序: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中的物品的所有不同顏色?

我需要的實際顏色對象的列表,而不僅僅是顏色標識,這點我可以開始使用

favorites.values_list('item__color').distinct 

回答

20

如果我理解正確的話,下面的應該做的伎倆:

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() 
+0

+1感謝。真正的原始查詢實際上比'user = request.user'複雜得多,因此最終與您的答案的第一部分一致。 –

6

你可以這樣做:

Color.objects.filter(item__favorite__user = request.user).distinct() 

您可能需要在你的外鍵設置一些related_name■如果這些都不是默認(我永遠不會記得默認值)。

+0

+1謝謝(上面/下面的清理查詢具有正確的語法)。 –

0

你可以這樣做:

favorites = Favorite.objects.filter(user=request.user).distinct('item__color')