在Django中将常见查询放在哪里? [英] Where to put common queries in Django?

查看:43
本文介绍了在Django中将常见查询放在哪里?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个相当复杂的查询集,我目前在单个视图中使用它来获取对象列表.

I have a queryset that is reasonably complicated, which I currently use in a single view for getting a list of objects.

我想在其他几个视图中使用相同的查询集,但不希望仅复制代码多次.我可以使用Manager,将查询集保留在一个位置,然后在每个视图中使用 except ,查询所依赖的日期在每个页面上都不同.

I want to use the same queryset in a couple of other views but would prefer not to just copy the code multiple times. I could use a Manager, to keep the queryset in one place, and use that in each view except the query relies on a date which is different on each page.

据我了解,经理不允许您传递变量...所以我想知道应该在哪里放置此查询,以免在多个视图中重复出现此问题.有什么想法吗?

As I understand it, Managers don't let you pass in variables... so I'm wondering where I should put this query so as not to keep repeating it in several views. Any thoughts?

FWIW,这是我的查询集,published_date是在每个页面上更改的变量:

FWIW, this is my queryset, and published_date is the variable that changes on each page:

day_publications = Publication.objects.filter(
        Q(reading__end_date__gte=published_date) | Q(reading__end_date__isnull=True),
        reading__start_date__lte=published_date,
).select_related('series',)

推荐答案

我认为您实际上应该使用Manager.我习惯在经理中使用这种方法:

I think you should actually use a Manager. I habitually use methods like this in my managers:

class CustomManager(models.Manager):

    def get_records(self, city_slug, dt):
        filter_kwargs = { 
            'city__slug': city_slug,
            'date_from__lt': dt,
            'date_to__gt': dt,
        }   
        return super(CustomManager, self).get_query_set().filter(**filter_kwargs)

然后我在模型上运行查询:

Then I run the query on my model:

MyModel.objects.get_records(city.slug, datetime.now())

当然,您可以跟进另一个过滤器调用并将它们链接起来,或者做任何您想做的事情.这种方法没有错,这就是经理们在这里的目的:-).

Of course, you can follow up with another call of filter and chain these or do whatever you want. There's nothing wrong with this kind of approach, that's what managers are here for :-).

这篇关于在Django中将常见查询放在哪里?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆