2012-07-16 10 views
7

मुझे मॉडलों के एक सेट से वस्तुओं को फ़िल्टर करने में कुछ परेशानी हो रही है।Django मॉडल विदेशीकी द्वारा फ़िल्टर

class Autor(models.Model):  
    nome = models.CharField(max_length=50) 
    slug = models.SlugField(max_length=50, blank=True, unique=True) 
    foto = models.ImageField(upload_to='autores/', null=True, blank=True) 
    ... 

class CategoriaRecolha(models.Model): 
    categoria = models.CharField(max_length=30) 
    descricao = models.TextField() 
    slug = models.SlugField(max_length=30, blank=True, unique=True) 
    ... 

class Recolha(models.Model):  
    titulo = models.CharField(max_length=100) 
    slug = models.SlugField(max_length=100, blank=True, unique=True) 
    descricao = models.TextField() 
    ficha_tec = models.TextField() 
    categoria = models.ForeignKey(CategoriaRecolha) 
    autor = models.ForeignKey(Autor) 
    .... 

क्या मैं प्राप्त करने का प्रयास कर रहा हूँ वर्ग लेखक, जिसमें वर्ग के क्षेत्र categoria Recolha एक विशिष्ट के बराबर है के क्षेत्रों है:

मैं 3 वर्गों है: यहाँ समस्या है मूल्य।

एक और सरल तरीके से, मुझे एक विशिष्ट श्रेणी में भाग लेने वाले सभी ऑटोर प्राप्त करने की आवश्यकता है।

धन्यवाद

उत्तर

17

एक और अधिक प्रत्यक्ष विकल्प:

autors = Autor.objects.filter(recolha__categoria=MyCategoria) 

जहां MyCategoria प्रासंगिक CategoriaRecolha उदाहरण है।

autors = Autor.objects.filter(recolha__categoria__categoria='my_category_name') 
+0

कि मैं के लिए ठीक इसी की तलाश थी है: या, आप विशिष्ट श्रेणी नाम के खिलाफ मिलान करना चाहते हैं, तो आप क्वेरी एक अन्य स्तर पर विस्तार कर सकते हैं । धन्यवाद डैनियल। – maloky

3
cat = CategoriaRecolha.objects.get(field=value) 
rows = Recolha.filter(categoria=cat) 
autors = [row.autor for row in rows] 

Django Docs बहुत अच्छी तरह से यह समझाने।

-1

Django 2 में ForeignKey.limit_choices_to docs

staff_member = models.ForeignKey(
    User, 
    on_delete=models.CASCADE, 
    limit_choices_to={'is_staff': True}, 
) 
संबंधित मुद्दे