Как заказать Queryset, содержащий объекты внешнего ключа, для модели по ключу primary_key связанной модели - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу знать, как добиться этого для очень простого случая. У меня есть объект Room с объектами, так как это внешний ключ. Рассмотрим четыре комнаты (от R1 до R4), каждая из которых подключена только к одному объекту объекта.

Предположим, что соответствующее сопоставление для комнат: R1-> F4, R2-> F1, R3-> F2, R4-> F3 (R1 - первая комната, F1 - объект, подключенный к первой комнате и т. Д.) (Все F1-F4 могут даже быть одним и тем же объектом объекта)

запрос базы данных при фильтрации возвращает объект Room (Все комнаты возвращены, упорядоченные по room_id)

Итак, я хочу знать, как запросить базу данных, отфильтровав объект «Объекты», чтобы получить Если все комнаты были подключены к одному объекту F1 , Я хочу, чтобы конечный результат был

мой файл models.py

class Room(Base):
    facilities = models.ForeignKey(Facilities, on_delete=models.CASCADE)
    room_type = models.ForeignKey(RoomTypes, on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
    offer = models.DecimalField(max_digits=5, decimal_places=2, default=0.0)
    description = models.TextField(null=True, blank=True)

# Facilities object that describes what all facilities are present in a room
class Facilities(Base):
    storage = models.BooleanField(default=True)
    locker = models.BooleanField(default=True)
    tv = models.BooleanField(default=True)
    bathroom = models.BooleanField(default=True)
    iron_table = models.BooleanField(default=True)
    balcony = models.BooleanField(default=True)
    garden = models.BooleanField(default=True)
    wifi = models.BooleanField(default=True)
    refrigerator = models.BooleanField(default=True)
    ac = models.BooleanField(default=False)
    cctv = models.BooleanField(default=False)
    bed = models.BooleanField(default=True)

Я хочу выбрать все объекты (которые подключены хотя бы к одному номер) и закажите их по room_id. Я хочу вернуть столько же объектов, сколько есть комнат. База данных MySql, и я использую Django -ORM для обработки всех запросов.

Другими словами, я хочу выполнить SQL Операция соединения ч / б Room and Facilities, общий столбец Идентификатор объекта в обеих таблицах, которые соединяют комнату и объект. И затем я хочу заказать результаты обслуживания, с меньшими номерами комнат, которые будут отображаться первыми.

1 Ответ

1 голос
/ 17 апреля 2020

Я бы добавил related_name к полю объектов в комнате

class Room(Base):
    facilities = models.ForeignKey(Facilities, on_delete=models.CASCADE, related_name="rooms")

И вы можете получить все объекты, заказанные по комнате, с:

Facilities.objects.order_by("rooms")

Я не уверен, что синтаксис, если related_name не установлено.

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