簡體   English   中英

按日期過濾時出現Django錯誤“運算符不存在:日期> =整數”

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

我在 postgresql 中使用 django 框架。 我有虛擬環境。 我的本地機器 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

模型.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}'

視圖.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)

當我打開包含信息的頁面時

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.

有人可以幫忙嗎。

更新

我認為我的 postgres 在引號中等待日期,例如:

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

我直接嘗試過,只需使用此類參數進行選擇即可。 也許我需要更改 postgress 中的設置?

我認為問題出在這一行

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

您使用日期字段,但timezone.now為您提供日期和時間 像這樣更改

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

或者這也是工作

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM