Ich arbeite an einem Django-Projekt. Da dies ein neues Projekt ist, möchte ich, dass es vollständig mit Anmerkungen vom Typ Python 3.6+ kommentiert wird. Ich versuche, Modelle zu kommentieren, aber ich habe Mühe, eine gute Methode dafür zu finden.
Nehmen wir das IntegerField
als Beispiel. Ich sehe zwei Möglichkeiten, um es zu kommentieren:
# number 1
int_field: int = models.IntegerField()
# number 2
int_field: models.IntegerField = models.IntegerField()
Nummer 1 schlägt in mypy fehl:
Incompatible types in assignment (expression has type "IntegerField[<nothing>, <nothing>]", variable has type "int")
Nummer 2 ist für mypy in Ordnung, aber IDEs wie PyCharm können es nicht lösen und beschweren sich häufig über falsche Typen.
Gibt es Best Practices, um die Modelle korrekt zu kommentieren, die mypy und IDEs erfüllen?
python
django
type-annotation
Djent
quelle
quelle
Antworten:
Django-Modelle (und andere Komponenten) sind schwer zu kommentieren, da viel Magie dahinter steckt. Eine gute Nachricht ist, dass eine Gruppe cooler Entwickler bereits die harte Arbeit für uns geleistet hat.
django-stubs bietet eine Reihe von Stubs und mypy-Plugins, die statische Typen und Typinferenzen für Django bereitstellen.
Zum Beispiel mit folgendem Modell:
mypy würde sich beschweren und sagen:
Um das Problem zu beheben, reicht es aus, das Paket zu installieren
und erstellen Sie eine
setup.cfg
Datei mit den folgenden Angaben:(Vergessen Sie nicht,
django_settings_module
entsprechend Ihrem Einstellungsmodul zu aktualisieren )Sobald dies erledigt ist, kann mypy Anmerkungen für Django-Modelle (und andere Komponenten) ableiten und überprüfen.
Hier ist ein Beispiel für die Verwendung in einer kleinen Ansicht:
Wieder einmal ist mypy mit den bereitgestellten Anmerkungen zufrieden:
Aus dem gleichen Grund ist auch ein Paket für Django Rest Framework verfügbar: djangorestframework-stubs .
quelle