Нужна помощь в запросе Django Orm - PullRequest
1 голос
/ 05 августа 2020

У меня есть 3 модели, и они следующие:

class Table(models.Model):
   waiter = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, 
                                                          related_name='restaurant_table')
   table_no = models.IntegerField()

   objects = TableManager()


class Order(models.Model):
   customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
   food = models.ManyToManyField(OrderFood, related_name='ordered_food')
   order_status = models.ForeignKey(OrderStatus, on_delete=models.CASCADE)
   table = models.ForeignKey(Table, on_delete=models.CASCADE)
   datetime = models.DateTimeField(default=now)

class OrderStatus(models.Model):
    CHOOSE = (
        ('Received', 'Received'),
        ('Cooking', 'Cooking'),
        ('WaiterHand', 'In Waiter Hand'),
        ('Delivered', 'Delivered'),
        ('Paid', 'Payment Completed'),
        ('Rejected', 'Rejected')
    )
    status = models.CharField(max_length=30, null=False, blank=False, choices=CHOOSE)
    created_at = models.DateTimeField(auto_now=True)
    updated_at = models.DateTimeField()

На самом деле я создаю систему управления рестораном. Итак, здесь в ресторане есть столики, связанные с официантами или более. Но мне нужна новая функция - статус таблицы. Я имею в виду, когда заказ активно связан со столом, это означает, что стол забронирован. На самом деле это не проблема, так как я могу сделать это разными способами.

Один из способов - я буду подсчитывать активный порядок, связанный с этой таблицей, и если я найду какой-либо активный порядок, я верну, что стол забронирован.

Другой способ: я добавлю дополнительное поле с таблицей, которое является флагом. Этот статус хранилища флагов таблиц зарезервирован или нет, я имею в виду логическое поле.

Но мой вопрос не является решением. У меня вопрос, какой из них лучше или есть другие хорошие решения. Кратко объясните, пожалуйста, я хочу знать, какое решение лучше и почему.

1 Ответ

1 голос
/ 05 августа 2020

вы можете поместить @property функцию под class Table, которую вы можете использовать напрямую с любыми объектами таблицы, в том числе в шаблонах.

@property
def check_table_status(self):
    status = 'Not Booked'
    if self.order_set.all().exists():
        status = 'Booked'
    return status
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...