Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要Django Orm查询中的帮助吗_Python_Php_Django_Database_Django Models - Fatal编程技术网

Python 需要Django Orm查询中的帮助吗

Python 需要Django Orm查询中的帮助吗,python,php,django,database,django-models,Python,Php,Django,Database,Django Models,我有3种型号,它们如下 class Table(models.Model): waiter = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name='restaurant_table') table_no = models.IntegerField() objec

我有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()
实际上,我正在创建一个餐厅管理系统。因此,在这里,一家餐厅有与一个或多个服务员相关的桌子。但我需要一个新功能,即表状态。我的意思是,当订单与该表有效关联时,意味着该表已被预订。事实上,这不是一个问题,因为我可以在很多方面做到这一点

一种方法是我将计算与此表关联的活动订单,如果我发现任何活动订单,我将返回已预订的表

另一种方法是,我将在表中添加一个作为标志的额外字段。这个标记表的存储状态是否已预订我指的是布尔字段


但我的问题不是解决办法。我的问题是哪一个更好,或者还有其他好的解决方案。请简单解释一下,我想知道哪种解决方案更好以及为什么。

您可以将
@property
函数放在
类表
下,也可以在模板中直接用于任何表对象

@property
def check_table_status(self):
    status = 'Not Booked'
    if self.order_set.all().exists():
        status = 'Booked'
    return status

你基本上是在问你有哪些想法更好。在“计算活动订单数,如果存在,则记录表”或“使用布尔标志标记记录表”之间。你对“更好”的定义是什么?你试过其中一种吗?是的,我两种都试过。事实上,我和我的队友有过争论,比如我们应该用哪一个。他说,如果我们使用“计算活动订单,如果存在一个,则表已被预订”这种方法,那么我们就不需要在需要另一个表字段时写入一个表字段。但我说过,如果我们使用第二种方法,也就是“添加一个标志字段”,我们就不需要进行连接查询或计数。我们只能通过表id知道表的状态@E您需要单独的
OrderStatus
型号吗?不能只将软管字段添加到
订单
模型中吗?使用
外键
表明相同的
订单状态
可以链接到多个
订单
s@Almabud第一个问题是,如果客户还没有订购任何东西怎么办;但是他们坐在桌子旁?@lain Shelvington OrderStats可以添加到订单模型中。但是我得到了这个模型的项目(谢谢@Pruthvi Barot这也是一个更好的解决方案。我想我会应用它。非常感谢。@Purthvi Barot->每当我要在模板的整个循环中打印它时,你不认为self.order\u set.all()存在吗?)此查询将执行n次?如果您确定没有表,就没有必要执行此查询。您可以一次检查此查询,但是,是的,每次在模板中调用此函数时,它都会调用此函数,因为它将只检查记录是否存在,这将是最小的