求指教 类似于`tag`这种字段怎么用ORM关系表达以支持搜索

比如这样一个模型 model

class Something(models): name = models.Charfield(.....) tags = models.JSONfileld(default=[])

这个tags 字段记录一些 标签信息,是一个字符串的列表 比如 ['tag1', 'tag2', 'tag3']

我想query查询 这张表里有 ‘tag1’的tags 的内容,或者同时['tag1', 'tag2']怎么写filter呢。求助

评论 2

  • #并操作
    # 支持链式操作
    Files.objects.filter(name__contains=value).exclude(type__contains=value)
    #否操作
    Files.objects.filter(name__contains=value).filter(type__contains=value)
    #或操作
    from django.db.models import Q
    Files.objects.filter(Q(type__contains=value) | Q(name__contains=value))))

  • <p>如果是JSONField,可以直接使用 </p> <pre class="codehilite"><code class="language-python">from django.db import models

    class Dog(models.Model): name = models.CharField(max_length=200) data = models.JSONField(null=True)

    def __str__(self):
        return self.name&lt;/code&gt;&lt;/pre&gt;

    <p>使用:</p> <pre class="codehilite"><code class="language-python">>>> Dog.objects.create(name='Rufus', data={ ... 'breed': 'labrador', ... 'owner': { ... 'name': 'Bob', ... 'other_pets': [{ ... 'name': 'Fishy', ... }], ... }, ... }) <Dog: Rufus> >>> Dog.objects.create(name='Meg', data={'breed': 'collie', 'owner': None}) <Dog: Meg> >>> Dog.objects.filter(data__breed='collie') <QuerySet [<Dog: Meg>]></code></pre>

    <p>参考文档:https://docs.djangoproject.com/en/4.0/topics/db/queries/#querying-jsonfield</p>