2009-12-30 26 views
51

Django'da bir tabloyu, bir yabancı anahtarın belirli bir alanının değerine göre filtrelemeye çalışıyorum. Ben ilişkili proje adına göre benim varlık listesine filtre istiyorumDjango - yabancı anahtar özelliklerine göre filtreleme

# models.py 
class Asset(models.Model): 
name = models.TextField(max_length=150) 
project = models.ForeignKey('Project') 

class Project(models.Model): 
name = models.TextField(max_length=150) 

-

Örneğin

Ben iki model var.

Şu anda yapıyorum iki sorgular:

# views.py 
project_list = Project.objects.filter(name__contains="Foo")   
asset_list = Asset.objects.filter(desc__contains=filter, project__in=project_list).order_by('desc') 

ana sorguda filtreleme bu tür belirtmek için bir yol olup olmadığını merak ediyorum?

cevap

71

Asset.objects.filter(project__name__contains="Foo")

+1

Teşekkürler, Bunu denedim ama görünüşe göre çift alt çizgi kullanmayı unutmuştum. –

+0

gerekli içerir? – DeadDjangoDjoker

9

Bu, queryset-refactor dalının 1.0'dan önce indiğinden bu mümkün olmuştur. Ticket 4088 sorunu ortaya çıkardı. Bu çalışması gerekir:

Asset.objects.filter(
    desc__contains=filter, 
    project__name__contains="Foo").order_by("desc") 

Django Many-to-one documentation bu ve Modeli API kullanarak Yabancı Keys aşağıdaki diğer örnekler vardır.

+0

bu, iki kez DB çarpacak mı I() bu daha optimum hale getirmek için select_related kullanarak olmalıdır? –

+4

Hangi sql'nin çalıştırılacağını görmek için .query.as_sql() ekleyebilirsiniz. – fastmultiplication

+0

django dokümanlar için bağlantı tamamen güncel değil ve '410 Sayfa kaldırıldı' üzerine toprakları: -/ – szeitlin