Django filter filters foreignkey

I'm having problems filtering objects from a set of models. Here is the problem:

I have 3 classes:

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

What I'm trying to get are Autor class fields in which the categorization of a Recolha class field is equal to a certain value.

In a simpler form, I need to get all the authors who participated in a particular category.

thanks

+7
source share
3 answers

More direct alternative:

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

where MyCategoria is the corresponding CategoriaRecolha instance. Or, if you want to match the name of a specific category again, you can expand the query to another level:

 autors = Autor.objects.filter(recolha__categoria__categoria='my_category_name') 
+17
source
 cat = CategoriaRecolha.objects.get(field=value) rows = Recolha.filter(categoria=cat) autors = [row.autor for row in rows] 

Django Docs explain this pretty well.

+3
source

in django 2 is ForeignKey.limit_choices_to docs

 staff_member = models.ForeignKey( User, on_delete=models.CASCADE, limit_choices_to={'is_staff': True}, ) 
-one
source

All Articles