2017-06-24 51 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_idを持っており、flight_dateすべてのインスタンスをフィルタリングする必要があります。これは私のlocalhostで動作します。私は自分のlocalhostコードでsqliteを使用しています。サーバーはPostGre dbを使用します。希望の結果を得るためにどのように照会しますか?

また、FlightScheduleDetailモデルのflight_dateは、DateFieldです。そして私のschedule_idはそのモデルのCharFieldである別のモデルのForiegnキーです。

またdateオブジェクトのtomorrow_date変数にはstrラッパーを付けずに試してみました。マイ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) 

このエラーが引き続き発生する場合は、どこかでミスマイグの移行が行われている可能性があります。

+0

私の質問で言及したように、私はクエリで 'str'キャストを取り出してみました。また、私の 'flight_date'は' DateField'です。 –

+0

そして、私が私の答えで述べたように、sqliteは何かをフィールドに入れることを可能にします。完全なモデルを投稿する必要があります。また、どのようなtommorow_dateのように表示 – e4c5

+0

まだMCVE FlightScheduleモデルを追加してくださいまた – e4c5

関連する問題