Question

Je travaille avec django et j'ai du mal à comprendre comment faire des requêtes complexes

Voici mon modèle

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'

Je dois extraire le nom d'utilisateur en fonction de l'objet tank.

L'objet utilisateur est celui intégré à django .. merci!

EDIT:

j'ai essayé ceci

print User.objects.filter(tankjournal__tank__exact=id)

Il semble ne pas extraire uniquement l'identifiant .. et extraire tout ce qui se trouve dans tankjournal et le faire correspondre à l'objet tank

Était-ce utile?

La solution

Si vous avez déjà votre objet tank , vous devriez pouvoir faire:

tank.user.username

Pour réduire le nombre de requêtes dans la base de données, envisagez d'utiliser select_related ( ) , par exemple

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

si vous avez un identifiant de réservoir spécifique, alors:

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

Autres conseils

Je comprends peut-être mal votre question, mais une requête sur User.objects.filter () renverra une liste d'objets User, et non d'identificateurs d'utilisateurs. Ce que vous avez écrit semble techniquement correct.

N'oubliez pas, cependant, que votre modèle définit un one-to-many entre l'objet TankProfile et le TankJournal. En d'autres termes, un même profil TankProfile peut être associé à plusieurs TankJournal et, par conséquent, à plusieurs utilisateurs. Compte tenu de cela, votre requête fait le bon choix en renvoyant plusieurs utilisateurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top