2016-08-23 33 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