Django Array包含一个字段

时间:2016-08-08 14:25:24

标签: django django-queryset

我正在使用Django和mongoengine。我有一个带有铭文列表的模型类,我希望获得该列表中具有id的文档。

classes = Classes.objects(inscriptions__contains=request.data['inscription']).all()

3 个答案:

答案 0 :(得分:2)

也许我错过了一些东西......但似乎你应该使用.filter()

classes = Classes.objects.filter(inscriptions__contains=request.data['inscription'])

答案 1 :(得分:1)

这个答案是关于你对rnevius回答的评论

在Django ORM中,无论何时使用ORM进行数据库调用,如果使用QuerySet /数字,如果使用get(),它通常会返回模型的count()或对象等等,取决于您使用的函数,而不是查询集。

Queryset函数的结果可用于实现进一步的细化,例如,如果您想执行order()或仅收集distinct()等,Queryset是惰性的,这意味着它只会在实际上遇到数据库在分配时不使用。您可以找到有关他们的更多信息here

由于没有返回查询集的函数无法实现这些功能。

花些时间深入了解Queryset文档,并提供示例。了解行为以提高应用程序效率非常有用。

答案 2 :(得分:0)

以下是查询ArrayField成员资格的一般说明:

对于Django ArrayField docsimport { NgModule, ApplicationRef, ErrorHandler } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { GlobalErrorHandler } from './error-handler'; import { ServicesModule } from './services'; import { AppComponent } from './app.component'; @NgModule({ declarations: [AppComponent], imports: [BrowserModule], bootstrap: [AppComponent], providers: [ { provide: ErrorHandler, useClass: GlobalErrorHandler } ] }) export class AppModule { } 运算符检查所提供的数组是否为ArrayField中值的子集。

因此,要过滤ArrayField是否包含值“ foo”,请传入一个长度为1的数组,其中包含要查找的值,如下所示:

__contains

您可以通过打印查询看到Django ORM生成# matches rows where myarrayfield is something like ['foo','bar'] Customer.objects.filter(myarrayfield__contains=['foo']) postgres operator

@>

如果您提供数组以外的内容,则会出现类似print Customer.objects.filter(myarrayfield__contains=['foo']).only('pk').query >>> SELECT "website_customer"."id" FROM "website_customer" WHERE "website_customer"."myarrayfield_" @> ['foo']::varchar(100)[] 的神秘错误