Django interior consulta de junção
-
03-07-2019 - |
Pergunta
Eu estou trabalhando com Django e tendo muita dificuldade para entender como fazer consultas complexas
Aqui está o meu 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'
Eu preciso puxar o nome de usuário dado o objeto tanque.
O objeto de usuário é aquele embutido no Django .. obrigado!
EDIT:
Eu tentei isso
print User.objects.filter(tankjournal__tank__exact=id)
Parece não retire apenas o id .. e retirar tudo em tankjournal e combiná-lo com o objeto do tanque
Solução
Se você já tem o seu tanque objeto que você deve ser capaz de fazer:
tank.user.username
Para reduzir as consultas de banco de dados que você pode querer considerar o uso de select_related ( ) , por exemplo,
tanks = TankJournal.objects.all().select_related()
for tank in tanks:
username = tank.user.username
Se você tem um ID de tanque específico, em seguida:
tank = TankJournal.objects.select_related().get(id=123456)
username = tank.user.username
Outras dicas
I podem ser mal-entendido sua pergunta, mas um pedido em User.objects.filter()
irá retornar uma lista de objetos usuário, e não IDs do usuário. O que você escreveu parece tecnicamente correto.
Lembre-se, porém, que o modelo que você tem configura um um-para-muitos entre o objeto TankProfile eo TankJournal. Em outras palavras, um único TankProfile pode ser associado a mais de um TankJournal, e, portanto, para mais do que um utilizador. Dado isto, você é consulta está fazendo a coisa certa, retornando mais de um usuário.