with tutorial pelicula learning how espaƱol descargar python django

python - tutorial - django windows



Cuenta Django anotar con un campo distinto (3)

Si solo desea contar los valores distintos, puede usar las funciones distinct () y count ():

count = Project.objects.values(''informationunit__username'').distinct().count()

Tengo dos modelos definidos libremente de esta manera:

class InformationUnit(models.Model): username = models.CharField(max_length=255) project = models.ForeignKey(''Project'') ... class Project(models.Model): name = models.CharField(max_length=255)

Ahora, en una vista, quiero anotar todas las InformationUnits que pertenecen a un proyecto, así que hago esto:

p = Project.objects.all().annotate(Count(''informationunit'')

lo cual funciona bien. Además, quiero saber, en cada proyecto, cuántos ''nombres de usuario'' distintos participan. Es decir, cuente cuántos "nombres de usuario" distintos hay en las InformationUnits que componen un proyecto. He intentado lo siguiente, pero simplemente cuenta el número de InformationUnit, independientemente del nombre de usuario:

p = Project.objects.all().annotate(Count(''informationunit__username'')

Tenga en cuenta que el nombre de usuario no es un objeto, es una cadena. ¿Hay una manera limpia de hacerlo o debería crear un código más complicado basado en bucles y códigos de spaghetti: P

¡Muchas gracias!


Count puede tomar un argumento distinct , así:

p = Project.objects.all().annotate(Count(''informationunit__username'', distinct=True))

Esto no parece estar documentado, pero puede encontrarlo en la fuente de Count.


Project.objects.all().annotate(Count(''informationunit__username'', distinct=True))