簡體   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