Django-tastypie: ImportError: Der Name „QUERY_TERMS“ kann nicht in Django 2.1 importiert werden

Erstellt am 1. Aug. 2018  ·  10Kommentare  ·  Quelle: django-tastypie/django-tastypie

Hallo,

Ich habe gerade von Django 2.0.7 mit django-tastypie==0.14.1 auf Python 3.5 auf Django 2.1 aktualisiert und bin auf diesen Fehler gestoßen:

...
  File "<frozen importlib._bootstrap_external>", line 673, in exec_module
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "/var/www/brownpapersession/dev/brownpapersession/brownpapersession/urls.py", line 16, in <module>
    from tastypie.api import Api, NamespacedApi
  File "/var/www/brownpapersession/dev/env/lib/python3.5/site-packages/tastypie/api.py", line 11, in <module>
    from tastypie.resources import Resource
  File "/var/www/brownpapersession/dev/env/lib/python3.5/site-packages/tastypie/resources.py", line 32, in <module>
    from django.db.models.sql.constants import QUERY_TERMS
ImportError: cannot import name 'QUERY_TERMS'

Ich werde sehen, ob ich weitere Informationen zu QUERY_TERMS finden kann

django-update ready for release

Hilfreichster Kommentar

Dies wurde in #1564 behoben und mit dem Zweig django-2.1 zusammengeführt. Dieser Zweig ist aufgrund anderer Testfehler (siehe #1562) nicht bereit für die Veröffentlichung, aber ich habe bestätigt, dass die verbleibenden Testfehler nichts mit QUERY_TERMS zu tun haben, sodass dieses Problem geschlossen werden kann.

Alle 10 Kommentare

Die Meldung verschwindet, nachdem resource.py wie folgt geändert wurde:

try:
    from django.db.models.sql.constants import QUERY_TERMS
except ImportError:
    # Django 2.1
   QUERY_TERMS = {
      'exact', 'iexact', 'contains', 'icontains', 'gt', 'gte', 'lt', 'lte', 'in',
      'startswith', 'istartswith', 'endswith', 'iendswith', 'range', 'year',
      'month', 'day', 'week_day', 'hour', 'minute', 'second', 'isnull', 'search',
      'regex', 'iregex',
   }

Ich werde später versuchen, eine PR zu erstellen

Normalerweise dauert es einige Wochen, bis die vollständige Kompatibilität für eine neue Version von Django implementiert ist.

Für diese eine Ausgabe wurde wahrscheinlich QUERY_TERMS verschoben; Anstatt es neu zu implementieren, sollten wir den neuen richtigen Weg finden, um eine Liste von SQL-Begriffen zu erhalten, die das ORM unterstützt.

Anscheinend wurde QUERY_TERMS entfernt .

Dies wird zu einem ziemlich schwierig zu lösenden Problem; Bei der schnellen Vorabvalidierung von Filtern hat sich deliciouspie stark auf QUERY_TERMS verlassen. Es scheint keinen eleganten Weg zu geben, diese Gruppe von Operatoren neu zu generieren, ohne ModelResource.build_filters zu überarbeiten. Das ist sowieso längst überfällig; Die Validierung anhand einer konstanten Liste von Operatoren machte es unmöglich, weitere Operatoren ohne Monkey-Patching hinzuzufügen, und die globale Liste von Operatoren bedeutete, dass sie unsinnige Operationen für Felder zulassen würde, die keinen Sinn machen, wie ein Filter ohne Berücksichtigung der Groß-/Kleinschreibung auf einem Ganzzahlfeld.

Der Weg nach vorne besteht wahrscheinlich darin, build_filters umzugestalten, um das Django-Feld abzurufen und die neue Such-API zu verwenden, um die Operation zu validieren.

Dies wurde in #1564 behoben und mit dem Zweig django-2.1 zusammengeführt. Dieser Zweig ist aufgrund anderer Testfehler (siehe #1562) nicht bereit für die Veröffentlichung, aber ich habe bestätigt, dass die verbleibenden Testfehler nichts mit QUERY_TERMS zu tun haben, sodass dieses Problem geschlossen werden kann.

Um weitere Verwirrung zu vermeiden, lasse ich dieses Problem offen, bis der Rest der 2.1-Unterstützung implementiert und mit dem Master zusammengeführt ist.

Die Testsuite wird jetzt unter Django 2.1 bestanden. Ich werde PyPI am 3. September veröffentlichen, wenn bis dahin keine größeren Fehler gefunden werden.

Dadurch wird auch die Unterstützung für Django 1.8 eingestellt, das bereits im April EOL-frei war.

Heute veröffentlicht.

Scheint gut zu funktionieren, @georgedorn Danke!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen