2011-09-28 22 views
14
gelen benzersiz nesne listesini almak

Ben benim Django uygulamasında aşağıdaki (basitleştirilmiş) modeller:Django: QuerySet

favorites = Favorite.objects.filter(user=request.user) 
: Şu anda ben aşağıdaki sorguyu kullanarak ihtiyacınız tüm öğeleri alıyorum

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) 

QuerySet'daki öğeler için tüm farklı renkleri nasıl alabilirim?

ben doğru anlamak ben

favorites.values_list('item__color').distinct 

cevap

20

kullanarak alabilirsiniz gerçek renk nesnelerin listesini değil, sadece renk kimlikleri, ihtiyaç hile yapmak gerekir aşağıdadır:

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) 

Bundan daha temiz bir yol olmalı.

Düzenleme: Daha net bir çözüm:

colors = Color.objects.filter(item__favorite__user=request.user).distinct() 
+0

+1 sayesinde. Gerçek orijinal sorgu aslında 'user = request.user''den çok daha karmaşıktı, dolayısıyla cevabın ilk kısmı ile bitti. –

6

yapabilir misin: Bu varsayılan değilse

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

Sen yabancı anahtarları bazı related_name leri ayarlamak gerekebilir (Varsayılanları asla hatırlayamıyorum).

+0

+1 teşekkürler (yukarıdaki yukarı/aşağı temizlenmiş sorgu doğru sözdizimine sahiptir). –

0

yapabilir misin:

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