首页 > 解决方案 > 如何创建代表电子表格的模型?

问题描述

我正在尝试构建一个表格样式的应用程序,以允许跟踪可以添加到品牌网站的电子表格中的项目。如果使用电子表格,我的表格将如下所示:

顾客姓名 客户地址 制片人
标记 主街 233 号 格雷格
公司 订购日期 代表 接收日期 成本 报价单号
一个 21 年 7 月 20 日 约翰 21 年 7 月 25 日 500 JDHP
21 年 7 月 20 日 玛丽
C 21 年 7 月 23 日 约翰 21 年 7 月 25 日 1500 584D
D 21 年 7 月 18 日 玛丽 21 年 7 月 22 日 400 J5HP

实际上,这个想法是我有一个模型来容纳每个客户的不同报价。我有 2 类公司(公共和私人),每个都会被跟踪,所以我设想一个包含这三种小表格(客户信息、私人公司报价和上市公司报价)的大型表格。无论我们是否与他们联系以获得报价,我都会在每张表中包括每家公司,以便我们知道如果客户要求更多报价,哪些选项仍然可用。

我一直在将 django 表单集视为一种可能的选择,但并不完全了解它们是如何工作的。我观看了一些教程并通读了文档,但似乎这些只是在表格中所有完整的输入之后添加一个空白输入。这是对表单集如何工作的正确解释吗?或者他们会有效地允许我在一个更大的表单中嵌套多个表单吗?其次是我将如何实现这个模型?我为列表中的每家公司尝试了 company_date_ordered、company_rep、company_date_received 等,但出现了很多冲突错误。

标签: djangodjango-modelsformset

解决方案


欢迎来到网络开发。

几点:

  1. 有人说,“应用程序像鱼一样老,数据像酒一样老” ——这意味着最好将注意力集中在数据模型上,而不是关注应用程序代码本身
  2. 电子表格本身就是表格 - 这意味着您不会构建表示电子表格的模型,而是构建表示电子表格的一行(对象)或每行的元素(对象)的模型

话虽如此,鉴于您的示例,让我们考虑一下我们正在使用哪些对象:

  1. 您的第一个“电子表格”看起来可能是 aCustomerProducer表格的组合 - 对于此示例,我们将其简化为仅Customer包含该字段的表格producer
  2. 您的第二个电子表格有点复杂,它似乎 join Company,类似于 anOrder并且可能是 a Representative(甚至可能更多) - 让我们将其分解为每个部分:

模型.py

class Customer(models.Model):
 
    """ 
        this is a simple model that represents a customer, 
        it doesn't have any relations to other tables 
    """

    name = models.CharField(...)
    address = models.CharField(...)
    producer = models.CharField(...)


class Order(models.Model):

    """
        this table represents orders, 
        it will have relations to other tables, add them as needed
    """
   
    # fields:
    date_ordered = models.DateField(...)
    date_received = models.DateField(...)
    quote_number = models.CharField(...)

    """
        an Order can only be associated to one Company 
        but a Company can have many Orders
        therefore we will use a ForeignKey
        the same goes for Representative
    """
   
    # relations:
    company = models.ForeignKey("Company", ..., related_name = "orders")
    representative = models.ForeignKey(...)
    


class Company(models.Model):

    """
        this model represents a Company
        its related to Orders,
        but the relation is defined on the Orders table
    """

    name = models.CharField(...)


class Representative(models.Model):

    ...

花一些时间思考您的实体是什么以及它们如何相互关联。一旦您的数据结构形成良好,您就可以开始构建界面供用户查看、编辑和添加到您的表格 - 表单是一个很好的开始方式,但它们肯定不是唯一的选择。祝你好运!


推荐阅读