2012-07-16 13 views
7

Tengo problemas para filtrar objetos de un conjunto de modelos. Aquí está el problema:Los modelos de Django filtran por la clave externa

tengo 3 clases:

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

Lo que estoy tratando de recuperar es de los campos de la clase Autor, en el que la categoria de campo de la clase Recolha es igual a una específica valor.

De una manera más simple, necesito obtener todos los autores que han participado en una categoría específica.

Gracias

Respuesta

17

Una alternativa más directa:

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

donde MyCategoria es el relevante CategoriaRecolha ejemplo. O bien, si desea hacer coincidir Agains el nombre de la categoría específica, se puede extender la consulta otro nivel:

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

eso era precisamente lo que estaba buscando . gracias Daniel. – maloky

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

El Django Docs explican esta bastante bien.

-1

en Django 2 es ForeignKey.limit_choices_to docs

staff_member = models.ForeignKey(
    User, 
    on_delete=models.CASCADE, 
    limit_choices_to={'is_staff': True}, 
) 
Cuestiones relacionadas