2012-07-16 17 views
7

Bazı modellerden nesnelere filtre uygulamakta sorun yaşıyorum.Django modelleri, yabancılara göre filtreleyin

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) 
    .... 

Ne almaya çalışıyorum sınıfın alan categoria Recolha belirli eşit olduğu sınıfın Autor, alanları: Ben 3 sınıfları

: Burada sorun değer.

Daha basit bir şekilde, belirli bir kategoriye katılan tüm otoriteye ulaşmam gerekiyor.

Teşekkür

cevap

17

bir daha doğrudan bir alternatif: MyCategoria ilgili CategoriaRecolha örneği olduğunu

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

. django 2'de

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

şudur: Belirli kategori adının agains eşleştirmek istiyorsanız Ya da, sorgu başka seviyesini uzatabilirsiniz . teşekkürler Daniel. – maloky

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

Django Docs oldukça iyi bu açıklar.

-1

i arıyordu tam ne ForeignKey.limit_choices_to docs

staff_member = models.ForeignKey(
    User, 
    on_delete=models.CASCADE, 
    limit_choices_to={'is_staff': True}, 
) 
İlgili konular