2017-11-10 16 views
0

django restFrameworkでdateTimeでフィルタリングしようとしています。 フィルタリングされないため、同じ結果が得られるため、動作しないようです。Django rest framework dateTimeによるフィルタリング

Model.py

#Modelo Fechas que formara parte del modelo horario 
class Fecha(models.Model): 
    fecha_inicio = models.DateTimeField(blank=True, default='') 
    fecha_fin = models.DateTimeField(blank=True, default='') 

    def __str__(self): 
     return self.fecha_inicio, self.fecha_fin 

#Modelo Horario 
class Horario(models.Model): 
    profesional = models.ForeignKey(Profesional, unique=True) 
    fechas = models.ManyToManyField(Fecha) 

    def __str__(self): 
     return self.profesional.user.username 

View.py

class FechaList(generics.ListAPIView): 
    filter_backends = (django_filters.rest_framework.DjangoFilterBackend,) 
    serializer_class = FechaSerializer 
    queryset = Fecha.objects.all() 
    filter_class = HorarioFilter 

Urls.py

url(r'^horario/$', views.FechaList.as_view()) 

Filters.py

class HorarioFilter(django_filters.FilterSet): 
    date_start = django_filters.DateTimeFilter(name="fecha_inicio") 

    class Meta: 
     model = Fecha 
     fields = { 
      'date_start': ['lte', 'gte', 'lt', 'gt'], 
     } 

Serializers.py

class FechaSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Fecha 
     fields = ('fecha_inicio','fecha_fin') 

リクエスト:http://127.0.0.1:8000/horario/?date_start__gte=2015-6-28+00:00。何もしないで、フィルターをかけないでください。応答は "horario"オブジェクトのリストであり、200コードを与えます。

ありがとうございます! :)あなたは、単にこのように、フィルタとして使用するフィールドにltltegtgteを使用することができます

+0

すると、あなたがfilter_backends =(HorarioFilter、) ''にviews.py 'filter_class = HorarioFilter'に置き換えるために試みることができるあなたのビューにこれを追加してみてください – Alexey

+1

解決方法私はこのエラーがあります:AttributeError at/horario/ 'HorarioFilter'オブジェクトには 'filter_queryset'属性がありません – Isma9

答えて

2

: クラスHorarioFilter(django_filters.FilterSet):

class Meta: 
     model = Horario 
     fields = { 
      'fecha__inicio': ['lte', 'gte', 'lt', 'gt'], 
     } 

そして、あなたのAPIリクエストだろう:GET {{DOMAIN}}/{{RESOURCES}}/?fecha__inicio__gte=2017-6-28+00:00&fecha__inicio__lt=2017-6-29+00:00:00

クエリーのparam用クリーナーやカスタムルックアップ式exprをしたい場合、あなたはthisのようなエイリアスを作成使用することができます。

あなたが推奨 django-filterを使用している、とあなたが1.xの上にあると仮定すると、 GET {{DOMAIN}}/{{RESOURCES}}/?started__gte=2017-6-28+00:00&started__lte=2017-6-29+00:00:00

そして、その上に:

class HorarioFilter(django_filters.FilterSet): 

    class Meta: 
     model = Horario 
     fields = { 
      'started__lte': ['fecha__inicio__lte'], 
      'started__gte': ['fecha__inicio__gte'], 
     } 

その後、あなたのAPIリクエストは次のようになりますあなたはDRFの設定でグローバルフィルタのバックエンドを指定しなかった場合、

filter_backends = (django_filters.rest_framework.DjangoFilterBackend,) 
+0

しかし、リクエストを送信するURLはどちらですか? tihsのように?:http://127.0.0.1:8000/horario/?fecha_inicio=2017-11-08T10:00:00 – Isma9

+0

私の答えが更新され、よりクリーンなクエリパラメータのための方法も追加されました – PatDuJour

+0

私は自分の質問を更新しました変更はありますが、仕事はしません....何もしません....あなたは私を助けてくれますか?どうもありがとう! :) – Isma9

関連する問題