GeoDjango: Kann ich OSMGeoAdmin in einem Inline im User Admin verwenden?

8

Profile enthält PointField . Ich habe OSMGeoAdmin in ProfileAdmin verwendet, hier:

%Vor%

Aber kann nicht herausfinden, wie man es in einem Inline für die Anzeige in UserAdmin verwendet. Ich habe dies derzeit wie folgt eingerichtet:

%Vor%

Ist es möglich, in dieser Situation die Klasse OSMGeoAdmin zu verwenden?

    
StringsOnFire 16.08.2015, 16:24
quelle

1 Antwort

4

Dies wäre eine gute Funktion, um zu fragen, denke ich.

Als Workaround können Sie die Tatsache nutzen, dass ein InlineModelAdmin einem ModelAdmin sehr ähnlich ist. Beide erweitern BaseModelAdmin .

Die Vererbung von StackedInline und ModelAdmin sollte nicht zu sehr kollidieren.

Das einzige Problem ist, dass beide Methoden __init__() 2 Positionsargumente annehmen und super().__init__() ohne Argumente aufrufen. Also, was auch immer die Vererbungsreihenfolge ist, wird es mit TypeError: __init__() missing 2 required positional arguments: 'parent_model' and 'admin_site'

fehlschlagen

Glücklicherweise ist die Methode InlineModelAdmin.__init__() , an der wir interessiert sind, nicht wirklich ausführlich oder komplex (nicht zu viele super().__init__() werden in Kaskade aufgerufen).

Hier ist, wie es aussieht in Django 1.9 :

%Vor%

Und hier ist, was sein Elternteil ( BaseModelAdmin ) aussieht wie in Django 1.9

%Vor%

Lasst uns jetzt alles zusammensetzen:

%Vor%

Es ist nicht wirklich eine befriedigende Lösung, denn es erfordert das Kopieren / Einfügen von Code aus django, der innerhalb der von Ihnen verwendeten Version von Django anders sein kann. Bei der Aktualisierung von Django könnte es ein Problem sein. Es sollte jedoch funktionieren, bis es in Django als Mix-In oder als InlineModelAdmin enthalten ist.

Hinweis: Die obigen Codefragmente stammen aus Django 1.9 . Sie sollten github-Tags durchsuchen, um die Ihrer Version entsprechenden Snippets zu finden.

    
Antoine Pinsard 09.03.2016, 21:02
quelle