внутренний запрос django - PullRequest
       9

внутренний запрос django

2 голосов
/ 04 марта 2009

Я работаю с django и с трудом понимаю, как выполнять сложные запросы

Вот моя модель

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'

Мне нужно вытащить имя пользователя для данного объекта танка.

Пользовательский объект - это объект, встроенный в django .. спасибо!

EDIT:

Я пробовал это

print User.objects.filter(tankjournal__tank__exact=id)

Кажется, он не вытащил только идентификатор ... и вытащил все в журнале и сопоставил его с объектом танка

Ответы [ 2 ]

6 голосов
/ 04 марта 2009

Если у вас уже есть объект tank , вы можете сделать:

tank.user.username

Чтобы уменьшить количество запросов к базе данных, вы можете рассмотреть возможность использования select_related () , например,

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

если у вас есть конкретный идентификатор танка, то:

tank = TankJournal.objects.select_related().get(id=123456)
username = tank.user.username
1 голос
/ 04 марта 2009

Возможно, я неправильно понимаю ваш вопрос, но запрос на User.objects.filter() вернет список объектов пользователя, а не идентификаторов пользователей. То, что вы написали, выглядит технически правильно.

Помните, однако, что ваша модель устанавливает один-ко-многим между объектом TankProfile и TankJournal. Другими словами, один TankProfile может быть связан с несколькими TankJournal и, следовательно, с несколькими пользователями. Учитывая это, ваш запрос делает правильную вещь, возвращая более одного пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...