【问题标题】:Django: how to save model into different database tables depending on which ManyToOne relationship it belongs to?Django:如何根据模型所属的ManyToOne关系将模型保存到不同的数据库表中?
【发布时间】:2021-08-04 22:53:42
【问题描述】:

我是 Django 新手。我的应用程序有两个模型,客户和订单,每个客户可以有多个订单。所以我所做的是在 Order 模型中建立 ForeignKey(Cusotmer) 关系:

    name = models.CharField(max_length=20)
    phone = models.CharField(max_length=20)
    def __str__(self):
        return self.name

class Order(models.Model):
    customer= models.ForeignKey(Customer,null=True, on_delete = models.SET_NULL)
    ordername = models.CharField(max_length=20)

在这种情况下,如果我想查询特定客户customer1的订单,我可以使用Order.objects.filter(Customer=customer1)。但是我想知道是否可以将每个客户的订单数据保存在单独的数据库表中?目前所有订单都保存在同一个表中,滥用过滤器可以让客户查看其他客户的订单。

【问题讨论】:

  • 你能提供一个有用的案例吗?

标签: django django-models


【解决方案1】:

但我想知道是否可以将每个客户的订单数据保存在单独的数据库表中?

即使有可能,您也绝对希望将每个客户的订单存储在单独的数据库表中。关系数据库设计用于将具有相同结构的数据作为行存储在表中,这就是 Django 模型(定义数据结构)期望与数据库交互的方式。

正确的做法是将所有客户的订单保存在一个表中,使用您的Order 模型,并使用 Django ORM 根据用户进行过滤。

目前所有订单都保存在同一个表中,滥用过滤器可以让客户查看其他客户的订单。

即使您为每个客户的订单使用单独的表格,您仍然需要确定向用户显示哪个表格的数据(就像在单个表格中处理所有订单一样,您必须确定要使用哪些行) .如果您正确使用 Django ORM(根据发出请求的用户过滤数据),这不是问题。

【讨论】:

  • 不可能的说法是不正确的,因为我已经看到一些允许您动态制作表格的软件包(尽管我认为这是一个坏主意),但我完全同意你的其余部分你的答案。
  • 我已经更新了我的答案,删除了不可能的声明,而是强调这不是一个好主意。
猜你喜欢
  • 1970-01-01
  • 2017-12-27
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 2020-07-11
相关资源
最近更新 更多