запрос внутреннего соединения django
-
03-07-2019 - |
Вопрос
Я работаю с 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'
Мне нужно получить имя пользователя, указанное в объекте tank.
Пользовательский объект - это тот, который встроен в django..Спасибо!
Редактировать:
Я уже пробовал это
print User.objects.filter(tankjournal__tank__exact=id)
Кажется, он не извлекает только идентификатор..и извлеките все из tankjournal и сопоставьте это с объектом 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
Другие советы
Возможно, я неправильно понял ваш вопрос, но просьба о User.objects.filter()
вернет список пользовательских объектов, а не идентификаторов пользователей.То, что вы написали, выглядит технически корректно.
Помните, однако, что имеющаяся у вас модель устанавливает соотношение "один ко многим" между объектом TankProfile и TankJournal.Другими словами, один TankProfile может быть связан с более чем одним TankJournal и, следовательно, с более чем одним пользователем.Учитывая это, ваш запрос поступает правильно, возвращая более одного пользователя.