Python 相互依赖表的django复杂查询

Python 相互依赖表的django复杂查询,python,django,list,django-models,Python,Django,List,Django Models,Django模型 class Product(models.Model): product_name = models.CharField(max_length=50) category = models.CharField(max_length=50) desc = models.CharField(max_length=120) company_name = models.CharField(max_length=50, default=None) t

Django模型

class Product(models.Model):
    product_name = models.CharField(max_length=50)
    category = models.CharField(max_length=50)
    desc = models.CharField(max_length=120)
    company_name = models.CharField(max_length=50, default=None)
    timestamp = models.DateTimeField(auto_now_add = True, auto_now = False)
    updated = models.DateTimeField(auto_now_add = False, auto_now = True)

    def __unicode__(self):
        return self.product_name


class ProductDetails(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    batch = models.CharField(max_length=50)
    quantity = models.IntegerField()
    cost = models.FloatField(null=True, blank=True, default=None)
    mfg = models.DateTimeField()
    exp = models.DateTimeField()
    timestamp = models.DateTimeField(auto_now_add = True, auto_now = False)
    updated = models.DateTimeField(auto_now_add = False, auto_now = True)

    def __unicode__(self):
        return self.batch


class product_barcode(models.Model):
    batch = models.ForeignKey(ProductDetails, on_delete=models.CASCADE)
    barcode = models.BigIntegerField()
    flag = models.IntegerField()

    timestamp = models.DateTimeField(auto_now_add = True, auto_now = False)
    updated = models.DateTimeField(auto_now_add = False, auto_now = True)

    def __unicode__(self):
        return self.barcode
我想计算由公司名称生成的条形码数量

我试过一些代码,比如

w=Product.objects.all().filter(company_name="company name")
print "w>>>",w
pid = []
for Pdata in w:
    pid.append(Pdata.id)
print "pid>>>",pid
在这里,我找到了属于特定公司的产品名称ID,但在此之后,我想找到属于产品ID的批次代码(在ProductDetails),然后我需要计算属于批次代码的所有条形码

简单地说

  • 公司[“公司名称”]
  • 产品['product1'、'product2'、'product3'],其中公司='company name'
  • 批次代码,其中产品=['product1'、'product2'、'product3']

    • 产品1['bxyz'、'b2xyz'、'b3xyz']
    • 产品2['b1xyz'、'b4xyz'、'b3xyz']
    • 产品3['b9xyz'、'b6xyz'、'b3xyz']
  • 计数条形码,其中批次代码['bxyz'、'b2xyz'、'b3xyz']['b1xyz'、'b4xyz'、'b3xyz']['b9xyz'、'b6xyz'、'b3xyz']


  • 我希望,我很了解你想要做什么,那么,像这样的事情呢:

    count = product_barcode.objects.filter(batch__product__company_name='company name').count()
    
    这应返回公司名称等于“公司名称”的所有产品的条形码编号


    两个下划线用于联接表,就像在SQL中使用联接一样。基于,您应该更改条形码类的名称(
    ProductBarcode
    )。以后最好从它开始。

    我希望,我很清楚你想要做什么,那么,像这样的事情怎么样:

    count = product_barcode.objects.filter(batch__product__company_name='company name').count()
    
    这应返回公司名称等于“公司名称”的所有产品的条形码编号

    两个下划线用于联接表,就像在SQL中使用联接一样。基于,您应该更改条形码类的名称(
    ProductBarcode
    )。为了未来,最好从它开始