Я делаю персональный проект по управлению ресторанами. Две из моих моделей сталкиваются с проблемой, эти модели - DiningRoom и Table.
DiningRoom - это представление любой области, которую может иметь ресторан (например, у нас может быть одна область внутри, а другая - на террасе ресторана). здание). И в каждом DiningRoom мы можем установить макет таблиц.
Таким образом, более объектно-ориентированный способ, которым я нахожу отображение, - это отношение многие-к-одному (ForeignKey). Так как один DiningRoom может иметь много столов, а один стол может быть только в одном DiningRoom. Правильно?
Итак, мои модели:
class DiningRoom(models.Model):
account = models.ForeignKey(Account, on_delete=models.CASCADE, null=False)
name = models.CharField(max_length=50, null=False, blank=False)
rows = models.IntegerField(max=15, null=False)
cols = models.IntegerField(max=15, null=False) # rows and columns are for the room's grid layout.
class Table(models.Model):
row = models.IntegerField(max=15, null=False) # The row in the room's grid where the table is at.
col = models.IntegerField(max=15, null=False) # the column in the room's grid where the table is at.
dining_room = models.ForeignKey(DiningRoom, on_delete=models.CASCADE, null=False) # Here is the problem.
Проблема в том, что, когда я запрашиваю DiningRooms учетной записи в представлении, мне нужно получить также таблицы, связанные с каждой из них. DiningRoom в результатах запроса.
def dining_rooms(request):
try:
account = Account.objects.get(id=request.session['account_id'])
except Account.DoesNotExists:
return response(request, "error.html", {'error': 'Account.DoesNotExists'})
dining_rooms = DiningRoom.objects.filter(account=account)
Но мне также нужны таблицы результатов в Dining_rooms!
Я нашел два возможных решения, но ни одно из них не кажется мне «правильным». Одним из них является установление отношения «многие ко многим» и подтверждение того, что любая таблица находится только в одном DiningRoom в представлении. И вторым, и хуже, может быть выбор таблиц по одному разу для каждого DiningRoom, полученного в наборе запросов (но представьте себе ресторан с 5 или 6 различными областями (DiningRooms), потребуется каждый раз выбирать базу данных шесть раз).
Выполнение этого наоборот и выборка всех таблиц и select_related DiningRooms невозможна, поскольку возможно иметь DiningRoom без таблиц в нем (и в этом случае у нас будет отсутствовать DiningRooms).
Что может быть лучшим способом справиться с этим? Спасибо!