如何检查Django arrayfield中的安全壳?

2024-10-01 13:40:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python中的django模型,其中一个模型的字段是id的ArrayField,并且,给定一个以ArrayField为字段的模型的特定实例,我想检查给定id是否在该实例的ArrayField中。我试过做x in self.exampleArrayField,但我得到了Value 'self.exampleArrayField' doesn't support membership test,我也试过x in list(self.exampleArrayField),但我不知道这是否有效(我的编辑器vscode没有抛出错误,但我使用的是Python)。有没有一个好的方法来做我想做的事情


Tags: django实例in模型testselfidsupport
1条回答
网友
1楼 · 发布于 2024-10-01 13:40:16

您希望使用ORM方法来实现这一点

例如,请查看the documentation on ArrayFields

我们有这个模型

from django.contrib.postgres.fields import ArrayField
from django.db import models

class Post(models.Model):
    name = models.CharField(max_length=200)
    tags = ArrayField(models.CharField(max_length=200), blank=True)

    def __str__(self):
        return self.name

查找标记为“django”的帖子

>>> Post.objects.filter(tags__contains=['django'])
<QuerySet [<Post: First post>, <Post: Third post>]>

这里tags__contains扩展为一个特殊的过滤器,它实际使用PostgreSQL特性在数组中进行查询

或者您可以使用under-documented ^{} method

你的例子是:

x in self.exampleArrayField.to_python()
< >强>仔细查看你的代码并考虑这是否真的有必要。如果您在一堆Python对象上循环并调用此方法,您将失去使用ORM在阵列上操作Postgres的100%性能优势

相关问题 更多 >