创建一个查询集来比较两个模型

时间:2016-08-23 16:35:57

标签: python django django-models django-views

我刚刚使用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_id的{​​{1}}是否在Backlog的模型中,一旦发现它验证了Material的前两位数字。如果tan_id归类为74,则'1'归类为800,其他设置为'3'。 ('2'格式通常为tan_id74-102345-03

我的两个问题是: 如何做到这一点,如果我必须创建一个新列来添加每个800-120394-03的信息。

1 个答案:

答案 0 :(得分: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

此代码应循环遍历数据库中的每个Backlog实例,然后尝试查找关联的Material。如果它没有找到材料(在你的情况下没有积压),objects.get()会引发一个它不存在的异常,我们打印它不存在并继续循环。如果是,我们按照您的指定对其进行分类。可能需要稍微调整,但它应该给你想要解决这个问题的骨头。如果没有,请告诉我。