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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top