简体   繁体   English

按日期过滤时出现Django错误“运算符不存在:日期> =整数”

[英]Django error when filter by date “operator does not exist: date >= integer”

I'm using django framework with postgresql.我在 postgresql 中使用 django 框架。 I have virtual environment.我有虚拟环境。 My local machine Mac , server is on Debian 10.我的本地机器 Mac ,服务器在 Debian 10 上。

$ pip freeze
amqp==5.0.6
asgiref==3.4.1
billiard==3.6.4.0
celery==5.1.2
certifi==2021.5.30
chardet==4.0.0
click==7.1.2
click-didyoumean==0.0.3
click-plugins==1.1.1
click-repl==0.2.0
Django==3.2.5
django-celery-beat==2.2.1
django-celery-results==2.2.0
django-timezone-field==4.1.2
greenlet==1.1.0
idna==2.10
kombu==5.1.0
lxml==4.6.3
multitasking==0.0.9
numpy==1.21.0
pandas==1.3.0
plotly==5.1.0
prompt-toolkit==3.0.19
psycopg2==2.9.1
psycopg2-binary==2.9.1
python-crontab==2.5.1
python-dateutil==2.8.1
pytz==2021.1
requests==2.25.1
six==1.16.0
SQLAlchemy==1.4.20
sqlparse==0.4.1
tenacity==7.0.0
urllib3==1.26.6
vine==5.0.0
wcwidth==0.2.5
yfinance==0.1.60

models.py模型.py

from django.db import models
from django.utils import timezone

class Ticker(models.Model):
    symbol = models.CharField(max_length=12)
    description = models.CharField(max_length=100, blank=True, default='')
    avg_volume = models.DecimalField(max_digits=20, decimal_places=6)
    last_close_price = models.DecimalField(max_digits=20, decimal_places=6, default=0)
    last_update_date = models.DateField(default=timezone.now)

    def __str__(self):
        return self.symbol

class TickerData(models.Model):
    date = models.DateField(default=timezone.now)
    open_price = models.DecimalField(max_digits=20, decimal_places=6)
    high_price = models.DecimalField(max_digits=20, decimal_places=6)
    low_price = models.DecimalField(max_digits=20, decimal_places=6)
    close_price = models.DecimalField(max_digits=20, decimal_places=6)
    adj_close = models.DecimalField(max_digits=20, decimal_places=6)
    volume = models.IntegerField()
    symbol = models.ForeignKey(Ticker, on_delete=models.CASCADE, related_name='infoset')

    def __str__(self):
        return f'{self.symbol}: {self.date}'

views.py视图.py

from datetime import date, datetime, timedelta
from django.db import connection
from django.shortcuts import render, get_object_or_404

from .models import Ticker, TickerData

def ticker_data_view(request, pk):
    # dates
    enddate = date.today()
    startdatedays = enddate - timedelta(days=180)

    ticker = Ticker.objects.get(pk=pk)
    ticker_info = TickerData.objects.filter(symbol=ticker).filter(date__gte=startdatedays)
    
    context = {
        'TickerData': ticker_info,
    }


    return render(request, 'tickerdata_list.html', context)

When I open page with info当我打开包含信息的页面时

DatabaseError at /ticker/2 Execution failed on sql 'SELECT "webapp_tickerdata"."id", "webapp_tickerdata"."date", "webapp_tickerdata"."open_price", "webapp_tickerdata"."high_price", "webapp_tickerdata"."low_price", "webapp_tickerdata"."close_price", "webapp_tickerdata"."adj_close", "webapp_tickerdata"."volume", "webapp_tickerdata"."symbol_id" FROM "webapp_tickerdata" WHERE ("webapp_tickerdata"."symbol_id" = 2 AND "webapp_tickerdata"."date" >= 2021-01-09)': operator does not exist: date >= integer LINE 1: ...a"."symbol_id" = 2 AND "webapp_tickerdata"."date" >= 2021-01...
                                                             ^ HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

Can somebody help please.有人可以帮忙吗。

UPDATE更新

I think my postgres waiting for date in quotes, like:我认为我的 postgres 在引号中等待日期,例如:

AND "webapp_tickerdata"."date" >= '2021-01-09'

I'd tried it directly , just select with such params and it works.我直接尝试过,只需使用此类参数进行选择即可。 Maybe I need to change settings in postgress?也许我需要更改 postgress 中的设置?

I think the problem is in this line我认为问题出在这一行

date = models.DateField(default=timezone.now)

You use date field but timezone.now give you a date and time Change this like that您使用日期字段,但timezone.now为您提供日期和时间 像这样更改

import datetime 
date = models.DateField(default=datetime.date.today)

Or maybe this is work aswell或者这也是工作

date = models.DateField(default=timezone.now.date)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM