首页 > 解决方案 > JSONField 包含在 Django

问题描述

嗨,我想知道一个列表是否包含另一个列表,为此我使用 django + djongo,但如果我正确执行查询,我不知道

我的模型是


class Item(models.Model):
    name = models.CharField(max_length= 255)
    _id = models.ObjectIdField(primary_key = True)
    sku = models.JSONField(null= True)
    providers= models.JSONField(null= True)
    generic = models.JSONField(null= True)
    is_validated = models.BooleanField(default = False)
    tags = models.JSONField(null= True)
    objects = models.DjongoManager()

我的序列化器

class ItemSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = Item
        fields = (
            '__all__'
        )

generic 是一个字符串列表,例如:["martillo", "s2","s3","s4"]

我想获取通用列表包含给定列表的所有项目,我正在尝试下一个查询,但它返回数据库中的所有项目

items = models.Item.objects.filter(generic__contains = ['martillo'])

我做错了什么?

标签: pythondjangomongodbdjongo

解决方案


import operator
from django.db.models import Q

Item.objects.filter(reduce(operator.and_, (Q(generic__contains=x) for x in ["martillo", "s2","s3","s4"] )))

相当于

Item.objects.filter(Q(generic__contains='martillo') & Q(generic__contains='s2') & Q(generic__contains='s3') etc...)

来自https://stackoverflow.com/a/4824810/1730167


推荐阅读