Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django从聚合日期开始的月份_Python_Django_Postgresql - Fatal编程技术网

Python django从聚合日期开始的月份

Python django从聚合日期开始的月份,python,django,postgresql,Python,Django,Postgresql,我试图在DJango ORM查询调用中获得每月的响应总和: models.Subscription.objects.all().extra(select={'Month': "EXTRACT(Month FROM Modified)"}).annotate(count_items=Count('Modified')) 我的模型是这样的: class Subscription(models.Model): SType = ( ('C', 'Civilian'),

我试图在DJango ORM查询调用中获得每月的响应总和:

models.Subscription.objects.all().extra(select={'Month': "EXTRACT(Month FROM Modified)"}).annotate(count_items=Count('Modified'))
我的模型是这样的:

class Subscription(models.Model):
    SType = (
        ('C', 'Civilian'),
        ('E', 'Enlisted'),
        ('O', 'Officer'),
    )
    Subscription_Type = models.CharField(max_length=1, choices=SType)
    Lifetime = models.BooleanField(default=False)
    Member = models.ForeignKey(Member)
    Modified = models.DateField()

    objects = SubscriptionManager()

    def __str__(self):
        return self.Member.first_name + " " + self.Member.last_name + ": " + self.Subscription_Type + "; last modified: " + self.Modified.strftime('%Y-%m-%d')
Subscription.objects.annotate(Month=ExtractMonth('Modified'))\
                .values('Month').annotate(Count('Month'))
我正在运行Postgres db后台,并确认了“已修改”列

但是,当我运行查询时,会出现以下错误:

File "/home/arcee123/.local/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: column "modified" does not exist
LINE 1: SELECT (EXTRACT(Month FROM Modified)) AS "Month", "ifthq_sub...

我忘了什么吗?我正试图得到每个月的记录数。谢谢。

您是否尝试查看您的模式?我想你只是把你的列名弄错了

假设您使用的是Djnago>=1.8,您还可以通过编写一个类似于以下内容的
Func
来避免整个问题:

class ExtractMonth(Func):
    template = "EXTRACT(MONTH FROM %(expressions)s)"

    def __init__(self, *expressions, **extra):
        extra['output_field'] = SmallIntegerField()
        super().__init__(*expressions, **extra)
       
然后像这样使用它:

class Subscription(models.Model):
    SType = (
        ('C', 'Civilian'),
        ('E', 'Enlisted'),
        ('O', 'Officer'),
    )
    Subscription_Type = models.CharField(max_length=1, choices=SType)
    Lifetime = models.BooleanField(default=False)
    Member = models.ForeignKey(Member)
    Modified = models.DateField()

    objects = SubscriptionManager()

    def __str__(self):
        return self.Member.first_name + " " + self.Member.last_name + ": " + self.Subscription_Type + "; last modified: " + self.Modified.strftime('%Y-%m-%d')
Subscription.objects.annotate(Month=ExtractMonth('Modified'))\
                .values('Month').annotate(Count('Month'))
这样,
'Modified'
是模型上字段的名称,Django为您解析列名

更新
中提出了一个更通用的解决方案。

您是否尝试查看您的模式?我想你只是把你的列名弄错了

假设您使用的是Djnago>=1.8,您还可以通过编写一个类似于以下内容的
Func
来避免整个问题:

class ExtractMonth(Func):
    template = "EXTRACT(MONTH FROM %(expressions)s)"

    def __init__(self, *expressions, **extra):
        extra['output_field'] = SmallIntegerField()
        super().__init__(*expressions, **extra)
       
然后像这样使用它:

class Subscription(models.Model):
    SType = (
        ('C', 'Civilian'),
        ('E', 'Enlisted'),
        ('O', 'Officer'),
    )
    Subscription_Type = models.CharField(max_length=1, choices=SType)
    Lifetime = models.BooleanField(default=False)
    Member = models.ForeignKey(Member)
    Modified = models.DateField()

    objects = SubscriptionManager()

    def __str__(self):
        return self.Member.first_name + " " + self.Member.last_name + ": " + self.Subscription_Type + "; last modified: " + self.Modified.strftime('%Y-%m-%d')
Subscription.objects.annotate(Month=ExtractMonth('Modified'))\
                .values('Month').annotate(Count('Month'))
这样,
'Modified'
是模型上字段的名称,Django为您解析列名

更新
中提出了一种更通用的解决方案。

ok。我试着修改,修改,修改日期,修改日期。这不是列名。当我出错时,它会给出建议。因此,这就是我要尝试的地方。我应该把helper类放在哪里?在models.py中?谢谢你把它放在哪里并不重要<代码>型号。py可以。正常。我试着修改,修改,修改日期,修改日期。这不是列名。当我出错时,它会给出建议。因此,这就是我要尝试的地方。我应该把helper类放在哪里?在models.py中?谢谢你把它放在哪里并不重要<代码>型号。py可以。