cet*_*eek 15 django django-queryset
我想将查询集条件保存到数据库以供重用.
所以,如果我有一个像这样的查询集:
Client.objects.filter(state='AL')
# I'm simplifying the problem for readability. In reality I could have
# a very complex queryset, with multiple filters, excludes and even Q() objects.
Run Code Online (Sandbox Code Playgroud)
我想保存到DB而不是查询集的结果(即具有匹配'AL'的状态字段的各个客户端记录); 但是查询集本身(即用于过滤客户端模型的标准).
最终目标是拥有一个"已保存的过滤器",可以从数据库中读取并由多个django应用程序使用.
起初我以为我可以序列化查询集并保存它.但序列化查询集实际上执行查询 - 然后我在序列化时最终得到了阿拉巴马州的静态客户端列表.我希望列表是动态的(即每次我从DB读取它应该执行的查询集并检索Alabama中最新的客户端列表).
编辑:或者,是否可以获取应用于查询集的过滤器列表?
就像是:
qs = Client.objects.filter(state='AL')
filters = qs.getFilters()
print filters
{ 'state': 'AL' }
Run Code Online (Sandbox Code Playgroud)
小智 15
你可以像jcd说的那样,存储sql.
您还可以存储条件.
In [44]: q=Q( Q(content_type__model="User") | Q(content_type__model="Group"),content_type__app_label="auth")
In [45]: c={'name__startswith':'Can add'}
In [46]: Permission.objects.filter(q).filter(**c)
Out[46]: [<Permission: auth | group | Can add group>, <Permission: auth | user | Can add user>]
In [48]: q2=Q( Q(content_type__model="User") | Q(content_type__model="Group"),content_type__app_label="auth", name__startswith='Can add')
In [49]: Permission.objects.filter(q2)
Out[49]: [<Permission: auth | group | Can add group>, <Permission: auth | user | Can add user>]
Run Code Online (Sandbox Code Playgroud)
在该例子中,你看到的条件是中的对象c和q(尽管它们可以在一个对象被接合,q2).然后,您可以序列化这些对象并将它们作为字符串存储在数据库中.
- 编辑 -
如果需要在单个数据库记录中具有所有条件,则可以将它们存储在字典中
{'filter_conditions': (cond_1, cond_2, cond_3), 'exclude_conditions': (cond_4, cond_5)}
Run Code Online (Sandbox Code Playgroud)
然后序列化字典.
| 归档时间: |
|
| 查看次数: |
3769 次 |
| 最近记录: |