consulta de unión interna de django
-
03-07-2019 - |
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
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.