Присоединительные запросы в 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)
Все готово!