9
votes

Filtrage sur DateTimefield avec le cadre de repos Django

J'ai un modèle avec un fichierdretimefield:

http://127.0.0.1:8000/api/shell/?created=2014-07-17T10:36:34.960Z
# It returns an empty array whereas there are items with a created field greater than 2014-07-17T10:36:34.960Z


3 commentaires

Pourriez-vous essayer cette URL: 127.0.0.1 : 8000 / API / Shell /? Créé = 2014-07-17% 2010: 36: 34.960 ?


Je pense que je suis dans ce cas: Github.com/tomchristie/django-REST -Framework / Problèmes / 1338


La première personne suggère également de supprimer le T de l'URL, alors peut-être que cela fonctionnera pour votre aussi.


3 Réponses :


2
votes

Cela peut ne pas être ce que vous voulez, mais vous pourriez simplement convertir de Unix Time. E.g.:

def filter_unix_dt(queryset, value):
    if not value:
        return queryset

    try:
        unix_time = int(value)
        t = datetime.fromtimestamp(unix_time)
        result = queryset.filter(created__gte=t)
        return result
    except ValueError:
        return queryset


class ShellMessageFilter(django_filters.FilterSet):
    created = django_filters.DateTimeFilter(action=filter_unix_dt)

    class Meta:
        model = ShellMessage
        fields = ['created']


1 commentaires

Réponse géniale, mais le django_filter devrait être Charfield au lieu de DateTimefilter: "Créé = django_filters.charfield (action = filtre_unix_dt)"



3
votes

Solution plus simple Si vous ne vous souciez pas des fractions de secondes: remplacez le "T" avec de l'espace (% 20): xxx

a travaillé pour moi.


0 commentaires

1
votes

Le problème et la solution sont documentés dans cette page d'émission de RDF: https: // github.com/tomchristie/django-Rest-Framework/issues/1338

TL; DR: UN DJANGO ISO Conversion 'Problème' empêche la DRF de travailler comme vous vous attendez. Une solution pour cela a été écrite dans la DRAF, vous permettant d'utiliser isodateTimefield au lieu de denttimefield . Il suffit de rejouer le t avec un espace de votre demande de paramétrage fonctionne également.


0 commentaires