Pregunta

Estoy trabajando con django y me cuesta entender cómo hacer consultas complejas

Aquí está mi modelo

class TankJournal(models.Model):
    user = models.ForeignKey(User)
    tank = models.ForeignKey(TankProfile)
    ts = models.DateTimeField(auto_now=True)
    title = models.CharField(max_length=50)
    body = models.TextField()

    class Meta:
        ordering = ('-ts',)
        get_latest_by = 'ts'

Necesito extraer el nombre de usuario dado el objeto del tanque.

El objeto de usuario es el que está integrado en django ... ¡gracias!

EDITAR:

He intentado esto

print User.objects.filter(tankjournal__tank__exact=id)

Parece que no se extrae solo la identificación ... y se extrae todo en tankjournal y se combina con el objeto del tanque

¿Fue útil?

Solución

Si ya tienes el objeto tank , deberías poder hacerlo:

tank.user.username

Para reducir las consultas de la base de datos, puede considerar el uso de select_related ( ) , p. ej.

tanks = TankJournal.objects.all().select_related()
for tank in tanks:
    username = tank.user.username

si tiene una identificación de tanque específica, entonces:

tank = TankJournal.objects.select_related().get(id=123456)
username = tank.user.username

Otros consejos

Puedo estar malinterpretando su pregunta, pero una solicitud en User.objects.filter () devolverá una lista de objetos de Usuario, no identificadores de Usuario. Lo que has escrito parece técnicamente correcto.

Recuerde, sin embargo, que el modelo que tiene configura uno a muchos entre el objeto TankProfile y TankJournal. En otras palabras, un único TankProfile puede asociarse con más de un TankJournal y, por lo tanto, con más de un usuario. Dado esto, tu consulta está haciendo lo correcto, devolviendo más de un usuario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top