小编cga*_*poz的帖子

结合AND和OR与Q对象的Django查询过滤器不返回预期结果

我尝试在使用Q对象的过滤器中组合AND和OR.它看起来像| 表现得像一个AND.这与先前的注释有关,该注释在同一查询中运行而不是在子查询中运行.

用Django处理这个问题的正确方法是什么?

models.py

class Type(models.Model):
    name = models.CharField(_('name'), max_length=100)
    stock = models.BooleanField(_('in stock'), default=True)
    hide = models.BooleanField(_('hide'), default=False)
    deleted = models.BooleanField(_('deleted'), default=False)

class Item(models.Model):
    barcode = models.CharField(_('barcode'), max_length=100, blank=True)
    quantity = models.IntegerField(_('quantity'), default=1)
    type = models.ForeignKey('Type', related_name='items', verbose_name=_('type'))
Run Code Online (Sandbox Code Playgroud)

views.py

def hire(request):
    categories_list = Category.objects.all().order_by('sorting')
    types_list = Type.objects.annotate(quantity=Sum('items__quantity')).filter(
        Q(hide=False) & Q(deleted=False),
        Q(stock=False) | Q(quantity__gte=1))
    return render_to_response('equipment/hire.html', {
           'categories_list': categories_list,
           'types_list': types_list,
           }, context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

产生SQL查询

SELECT "equipment_type"."id" [...] FROM "equipment_type" LEFT OUTER JOIN
    "equipment_subcategory" ON ("equipment_type"."subcategory_id" =
    "equipment_subcategory"."id") LEFT OUTER JOIN …
Run Code Online (Sandbox Code Playgroud)

python django django-q

26
推荐指数
4
解决办法
3万
查看次数

清洁实施"决策矩阵"

我试图找到一个干净的解决方案来实现python中的基本决策矩阵.我有8个传感器监控安装,根据这8个传感器的状态,我需要激活一些继电器.

我的决策矩阵看起来像(S是传感器,R是R):

S1   S2   S3   S4   S5   S6   S7   S8   R1   R2   R3
0    1    0    0    1    1    0    1    0    0    1
1    0    1    0    0    1    1    0    1    1    1
0    1    1    1    0    0    0    1    0    1    0
...
Run Code Online (Sandbox Code Playgroud)

目前我看到的唯一一个实现是我的descision矩阵的每一行的if/elif语句套件,如:

if S1==0 and S2==1 and S3==0 and S4==0 and S5==1 and S6==1 and S7==0 and S8==1:
    relay_state('R1', 0)
    relay_state('R2', 0)
    relay_state('R3', 1)
elif ...
Run Code Online (Sandbox Code Playgroud)

这肯定会奏效,但我想知道是否有更清洁的方法来实现这一点?

python matrix

2
推荐指数
1
解决办法
845
查看次数

标签 统计

python ×2

django ×1

django-q ×1

matrix ×1