Django 1.9.4在有条件的3个型号上过滤多对一

时间:2016-04-20 05:55:02

标签: django

我正在尝试从三个表中过滤字段。 我需要加入1表作为列表和2表与条件。 我有Django 1.9.4,MySql 5.6.17

这是我的models.py:

def get_queryset(self):
    return Products.objects.values('id', 'fullname', 'authors', 'code', 'theme').annotate(barcodes=Concat('barcodes__barcode'))

我需要获取所有产品,加入group_concat(不同的条形码)并加入shop_id = 1的价格,如果字符串中的价格不存在 - 返回价格= 0

我这样做了:

class Concat(Aggregate):
    function = 'GROUP_CONCAT'
    template = '%(function)s(%(distinct)s%(expressions)s)'
    def __init__(self, expression, distinct=False, **extra):
        super(Concat, self).__init__(
            expression,
            distinct='DISTINCT ' if distinct else '',
            output_field=models.CharField(),
            **extra)  

并使用聚合函数:

override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.requestLocation()
locationManager.requestWhenInUseAuthorization()
locationManager.requestAlwaysAuthorization()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
}

如何使用shop_id = 1添加价格?

感谢。

1 个答案:

答案 0 :(得分:0)

from django.db.models import Q

...

def get_queryset(self):
    return Products.objects.filter(Q(prices__shop_id=1) | Q(prices__shop_id__isnull=True)).values('id', 'fullname', 'authors', 'code', 'tema', 'prices__price').annotate(barcodes=Concat('barcodes__barcode', True))