繁体   English   中英

问题相关 ORM django 和 sqlite3 数据库

[英]Question related ORM django and sqlite3 database

我正在创建一个 BOM 应用程序来为我们的 IT 网络部门的物料清单生成 PDF 文件。 我需要有关数据库结构和外键的帮助来建立 ORM。 基于这些 model,我创建了表单,该表单将接受 IT 用户的输入并使用以下模型计算该实例的 BOM,请单击此处 在这里,我们可以有不同的供应商,每个供应商都有不同的设备型号类型,其中包括应该相互联系以利用 DRY 原则和 ORM 映射等的部件/项目。任何基本布局都应该在这方面有所帮助。

任何想法对我来说都是一个很好的开始,因为我是网络架构师并且在编程世界中没有很多经验刚刚开始进入 python 编码和学习 django。

class CiscoModel(models.Model):
    router_switch_type =  models.CharField(max_length=50)

    def __str__(self):
        return self.router_switch_type
class CiscoParts(models.Model):
    model = models.ForeignKey(CiscoModel, on_delete=None)
    part_number = models.CharField(max_length=50)
    voice = models.BooleanField(default=False)
    desc = models.CharField(max_length=200)
    service_duration = models.IntegerField(blank=True, null=True)
    unit_list_price = models.FloatField()
    qty = models.IntegerField()
    unit_net_price = models.FloatField(blank=True, null=True)
    discount = models.IntegerField(blank=True, null=True)
    extended_net_price = models.FloatField()

    def __str__(self):
        return self.part_number

class RuckusModel(models.Model):
    switch_type = models.CharField(max_length=50)

    def __str__(self):
        return self.switch_type

class RuckusParts(models.Model):
    model = models.ForeignKey(RuckusModel, on_delete=None)
    sku = models.CharField(max_length=50)
    desc = models.CharField(max_length=200)
    service_duration = models.IntegerField()
    unit_list_price = models.FloatField()
    qty = models.IntegerField()
    unit_net_price = models.FloatField()
    discount = models.IntegerField()
    extended_net_price = models.FloatField()

对于初学者,请确定您的业务参与者。 每个业务参与者都是 class

例如:

Device (Physical Device Unit)
DeviceModel (Product form a vendor)
DevicePart (Parts form a vendor)
Vendor (Indevidual Vendor)

DeviceModel 可以有多个 0 到 Multiple Parts 并且 1 Part 可以属于多个 DeviceModels 所以在 DeviceModel 和 DevicePart M2M 之间建立一个多对多关系在 Django

然后供应商可以表这将与 DeviceModel 和 DevicePart 表都具有外键关系,以便您能够识别谁是单个 DeviceModel 和 DevicePart 的供应商

最后一个设备表将具有与单个设备相关的属性,例如序列号、所有者、价格,以及对 DeviceModel 的外键引用

您可以将库存报告导出为数据库视图

class DeviceModel(models.Model):
    device_model = models.CharField(max_length=50)

class Device(models.Model):
    device_model = models.ForeignKey(DeviceModel, on_delete=None)
    sku = models.CharField(max_length=50)
    desc = models.CharField(max_length=200)
    service_duration = models.IntegerField()
    unit_list_price = models.FloatField()
    unit_net_price = models.FloatField()
    discount = models.IntegerField()
    extended_net_price = models.FloatField()

class DevicePart(models.Model):
    device_model = models.ManyToManyField(DeviceModel)
    part_number = models.CharField(max_length=50, blank=True, null=True)
    part_description = models.CharField(max_length=200, blank=True, null=True)

    def __str__(self):
        return self.device_model


class Vendor(models.Model):
    ARISTA = 'Arista'
    CISCO = 'Cisco'
    RUCKUS = 'Ruckus'

    VENDOR_CHOICES = [
        (ARISTA, 'arista'),
        (CISCO, 'cisco'),
        (RUCKUS, 'ruckus'),
       ]
    vendor = models.CharField(
        max_length=2,
        choices=VENDOR_CHOICES,
        default=CISCO,
    )
    device_model = models.ForeignKey(DeviceModel, on_delete=None)
    device_part = models.ForeignKey(DevicePart, on_delete=None)

这有意义吗……?

您在设备和设备部件之间存在 m2m 关系,因此您可以通过添加映射到设备的每个部件的定价来计算设备总价格

假设您有 5 个 Model “M”的设备,而 Modal M 由 10 个单独的部件组成,因此 5 个设备的定价将是共同的,因此总成本应该是 Modal 而不是单个设备

但是随着时间的推移,零件的价格会发生变化,您必须在设备进入系统期间跟踪设备的总价格

  1. 我建议将定价信息添加到零件
  2. Part和Modal应该有M2M关系
  3. 设备应该有一个额外的列,说明设备的总价格,因为部件的价格将在一段时间内不断变化,但一旦设备创建,其总成本不太可能改变

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM