2016-08-23 34 views
0

我剛剛使用Django。我剛剛創建了我的模型,並使用.cvs導入模塊將信息遷移到我的sqlite3數據庫。這是我的模塊:創建一個查詢集來比較兩個模型

class Backlog(models.Model): 
    sales_order = models.CharField(max_length=30) 
    po_number = models.CharField(max_length=30) 
    order_number = models.IntegerField(blank=True) 
    line_number = models.IntegerField(blank=True) 
    ship_Set = models.IntegerField(blank=True) 
    product_id = models.CharField(max_length=30) 
    ordered_quantity = models.IntegerField(blank=True) 

class Material(models.Model): 
    product_id = models.CharField(max_length=50) 
    tan_id = models.CharField(max_length=50) 

現在,我有我的表內的信息我要做到以下幾點:

  • 找到,如果product_idBacklogMaterial的模型,一旦它找到它驗證tan_id的前兩位數字。如果是74歸類爲'1',如果是800歸類爲'3'否則設爲'2'。 (tan_id格式通常是74-102345-03800-120394-03

我的兩個問題是:如何 做到這一點,如果我要創建一個新的列從每個product_id添加的信息。

+0

當您嘗試解決此問題時,您是否已經有待辦事項清單? –

+0

是的,積壓表填寫了必要的數據。我只是在尋找正確的方式來使關係和操作數據來獲得所需的輸出。 – Deluq

回答

1

玉以及鑑於你目前的模式,這裏是一個可能的解決方案,你所遇到的問題:

for backlog in Backlog.objects.all(): 
    try: 
     material = Material.objects.get(product_id = backlog.product_id) 
     if material.tan_id[0:2] == '74': 
      # Classify as 1 
     elif material.tan_id[0:2] == '80': 
      # Classify as 3 
     else: 
      # Classify as 2 
    except Material.DoesNotExist: 
     print("This material is not in backlog") 
     continue 

此代碼應遍歷積壓的每一個實例你在你的數據庫,然後試圖找到相關材料。如果它沒有找到材質(在你的情況下沒有積壓),objects.get()會引發一個它不存在的異常,我們將它打印出來並繼續循環。如果是,我們按照您的指定進行分類。可能需要稍微調整一下,但它應該給你你想要解決這個問題的骨頭。讓我知道如果它不。

+0

我用你的邏輯結構,但最後我用字符串.startwith if語句來查找'74','800'。謝謝 – Deluq