Присоединительные запросы в Django

personel_id =models.ForeignKey(User,on_delete=models.CASCADE,default=None)
    reservation_title = models.CharField(max_length=30)
    reservation_situation = models.BooleanField(default=False)

У меня есть подобная модель. Также у меня есть модель пользователя Admin. Я просто хочу получить данные, связанные с ID пользователя. Например, User_id = 3 и Rezervastion_id = 3 Я хочу получить информацию о человеке через это. Мой запрос работает с базой данных, я просто хочу сделать это с помощью Django ORM.

SELECT * от резервирования LEFT JOIN auth_user ON reservation.personel_id_id = auth_user.id WHERE reservation.id='pk' AND auth_user.id='pk'

Здравствуйте, я пытаюсь получить результат этого sql запроса в django. Как я могу сделать этот запрос, используя Django ORM's?

Вы можете получить Reservation с помощью id=3 и где personel_id_id находится 2 с помощью:

Reservation.objects.get(
    id=3,
    personel_id_id=2
)

но ForeignKey обычно имеют без …_id суффикс: Django автоматически добавит суффикс …_id для поля, хранящего id пользователя. Таким образом, вы должны реализовать вашу модель как:

from django.conf import settings

class Reservation(models.Model):
    personel = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )
    reservation_title = models.CharField(max_length=30)
    reservation_situation = models.BooleanField(default=False)

и, таким образом, отфильтровать с:

reservation = Reservation.objects.get(
    id=3,
    personel_id=2
)

вы можете получить доступ к деталям пользователя с помощью reservation.personel, который затем является объектом модели пользователя.

Если вы хотите получить данные о пользователе в том же запросе, что экономит дополнительное путешествие к базе данных, вы можете использовать:

reservation = Reservation.objects.select_related('personel').get(
    id=3,
    personel_id=2
)

Примечание: Обычно лучше использовать settings.AUTH_USER_MODEL [Django-doc] для ссылки на модель пользователя, чем использовать User модель [Django-doc] напрямую. Для получения дополнительной информации вы можете посмотреть ссылка на User модель раздел документации .

reservation = Reservation.objects.select_related('personel_id').filter(id=pk, personel_id__id=current_user)

Все готово!

Вернуться на верх