Вопрос

Я работаю с 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 и, следовательно, с более чем одним пользователем.Учитывая это, ваш запрос поступает правильно, возвращая более одного пользователя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top