【问题标题】:Django QuerySet.extra() and PostgreSQL age() functionDjango QuerySet.extra() 和 PostgreSQL age() 函数
【发布时间】:2013-05-01 10:23:27
【问题描述】:

我正在尝试在 Django 中编写一个过滤器,我首先过滤查询集,然后我想再次使用以下 SQL-statemnet 过滤它:

SELECT * FROM user, 
    (select EXTRACT(year FROM age(birthday)) as age FROM user) as age 
WHERE age.age between 20 AND 40;

我该怎么做?

编辑:模型如下

class User(models.Model):
    first_name = models.CharField(max_length=50)
    birthday = models.DateField()

【问题讨论】:

    标签: sql django postgresql django-queryset


    【解决方案1】:

    你知道你可以chain filters吗?

    import datetime
    
    now = datetime.datetime.now().year
    u = User.objects.filter(x=42).filter(birthday__year__range=(now-40,now-20))
    

    【讨论】:

    • 我当然知道链式,但实际上我想在 db 上进行计算,因为性能原因。除了您的方法之外,我还收到以下错误: FieldError: Join on field 'birthday' not allowed.您是否将查找类型的“年份”拼错了?
    • 它是一个 DateField(),所以它应该可以工作吗?我已经将它与整个日期一起使用,但只有年份不起作用。
    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 2011-02-25
    • 2017-11-14
    • 1970-01-01
    • 2018-02-22
    • 2015-04-19
    • 2015-11-14
    • 1970-01-01
    相关资源
    最近更新 更多