2017-06-24 20 views
0

我從我的Django項目中的PostGre數據庫查詢。django.db.utils.ProgrammingError:操作符不存在:字符變化日期

以下是我的代碼。

flight_schedule_detail_instance = FlightScheduleDetail.objects.filter 
      schedule_id=FlightSchedule.objects.filter(schedule_id=instance.schedule_id), 
      flight_date=str(tomorrow_date) 
      ) 

我需要過濾具有特定schedule_idflight_date的所有實例。這在我的本地主機。我在我的localhost代碼中使用sqlite。服務器使用PostGre db。我如何查詢以獲得我想要的結果?

另外,flight_date在我的FlightScheduleDetail型號是DateField。而我的schedule_id是另一款型號的Foriegn鑰匙,該型號爲CharField

我也試過沒有str包裝到我的tomorrow_date變量這是一個date對象。

models.py

class FlightScheduleDetail(models.Model): 
    flight_date = models.DateField(max_length=30, null=False, blank=False) 
    schedule_id = models.ForeignKey(FlightSchedule, null=False, related_name="schedule_details", blank=False) 
    route_id = models.CharField(max_length=150, null=False, blank=False, unique=True) 
    flight_status = models.ForeignKey(Status, null=True, default=1) 

    def __unicode__(self): 
     return u'%s' % self.route_id 

    class Meta: 
     verbose_name_plural = "flights Schedule Details" 


class FlightSchedule(models.Model): 
    tail_number = models.ForeignKey(TailNumber, null=False, blank=False) 
    schedule_id = models.CharField(max_length=40, null=False, blank=False, unique=True) 
    flight_group_code = models.ForeignKey(FlightGroup, null=False, blank=False) 
    minLength = MinLengthValidator(limit_value=7) 
    binary = RegexValidator(r'^[0-1]*$', 'Only 0s and 1s are allowed.') 
    scheduled_days = models.CharField(max_length=7, validators=[binary, minLength], null=True, blank=True, 
             default="1111111") 
    origin_port_code = models.ForeignKey(Port, null=False, related_name="Origin", blank=False) 
    destination_port_code = models.ForeignKey(Port, null=False, related_name="Destination", blank=False) 
    flight_departure_time = models.TimeField() 
    start_date = models.DateField() 
    end_date = models.DateField() 

    def __unicode__(self): 
     return u'%s' % self.schedule_id 

    class Meta: 
     verbose_name_plural = "flights Schedule" 

,我計算我的tomorrow_date如下:

tomorrow_date = datetime.date.today() + datetime.timedelta(days=1) 

回答

1

這就是爲什麼你應該在開發和生產中使用同一數據庫中的一個典型例子。 Sqlite沒有類型的概念。您可以聲明字段類型,但不嚴格遵守。因此,您可以輕鬆地將文本數據插入日期字段。 Postgresql另一方面對類型非常嚴格。

根據問題的更新更新我的答案。

我不太確定,如果你需要這個詳細的查詢。您有一個FlightSchedule的實例,該實例將使您可以直接訪問所有相關的FilightScheduleDetail實例。你可以過濾它這樣

instance.flightscheduledetail_set.filter(flight_date=tommorow_date) 

如果仍然有錯誤,那隻能意味着有一個missig遷移的地方。

+0

就像我在我的問題中提到的那樣,我嘗試在我的查詢中刪除'str'。而且我的'flight_date'是一個'DateField'。 –

+0

而且就像我在我的回答中提到的,sqlite允許您將任何內容放入字段中。你應該發佈你的完整模型。並且還顯示tommorow_date看起來像什麼 – e4c5

+0

仍然不是MCVE請添加FlightSchedule模型 – e4c5

相關問題