GenericForeignKey und Admin in Django

8

Nehmen wir an, ich habe ein Post-Objekt, das Bilder, Videos und andere Medientypen enthalten kann. Ich kann ein GenericForeignKey verwenden, um sie miteinander zu verbinden. Etwas wie:

%Vor%

Jetzt kann ich einfach eine Admin-Oberfläche erstellen, wie:

%Vor%

Nun die Frage :) In admin / kann ich problemlos einen neuen Beitrag erstellen. Zum Beitrag kann ich problemlos weitere MediaObject hinzufügen. Im Panel habe ich ein Dropdown-Menü zur Auswahl des Typs (Audio, Video, ...), aber ich muss manuell die ID des Objekts eingeben, das ich mit Post verknüpfen möchte.

Ich habe verschiedene Erweiterungen versucht, einschließlich Grappelli. Einige bieten die Möglichkeit, die ID von Objekten, die hier verlinkt werden sollen, nachzuschlagen . Ich möchte hier hinzufügen Objekte hinzufügen, z. B. eine AudioMedia, eine VideoMedia, eine ImageMedia, je nachdem, was ich aus dem Dropdown auswählen.

Irgendwelche Vorschläge?

    
magiambelli 17.12.2012, 01:23
quelle

3 Antworten

4

Sie müssten ziemlich viel arbeiten, um das in Gang zu bringen.

  • Sie möchten, dass der Administrator dynamisch ein Modell anzeigt, abhängig davon, welchen Modelltyp Sie aus einer Dropdown-Liste ausgewählt haben.
  • Djangos Admin macht das nicht (und auch keine bekannten Erweiterungen).

Damit dies funktioniert, müssen Sie:

  1. Schreiben Sie einen benutzerdefinierten JavaScript-Ereignishandler, der die Änderung des Dropdown-Menüs für die Modellauswahl erfasst.
  2. Ruft Djangos Administrator an und fordert das Inline-Modell für dieses Modell an.
  3. Aktualisiert die aktuelle HTML-Seite mit diesem Modellformular.
  4. Dann müssen Sie die save () - Methode des Modells des Elternmodells abfangen, um herauszufinden, mit welcher Kindmodellform es zu tun hat, und es korrekt in der Datenbank speichern.
  5. Dann müssen Sie herausfinden, wie Sie die Modellform des Elternmodells erhalten, um die Modellform des entsprechenden Kindmodells in Abhängigkeit vom Modell des Kinds korrekt anzuzeigen.

Klang entmutigend? Es ist.

Hier ist ein einfacherer Weg:

Habe einfach ein einziges "Media" -Modell. Sie haben ein paar Felder auf dem Modell, die nur für einen Ihrer Typen gültig sind (obwohl es viele Crossover gibt).

Benennen Sie alle Felder, die für einen einzelnen Medientyp spezifisch sind, mit einem Präfix für diesen Medientyp, d. h. image_size', or video_title '.

Fügen Sie Ihrem ModelAdmin einen JavaScript-Handler hinzu, der Felder basierend auf einem Dropdown für den Medientyp selektiv ein- und ausblendet. Etwas wie das:

%Vor%     
Jack Shedd 25.02.2013 10:18
quelle
0

Ich weiß, das ist ziemlich alt, aber das ist immer noch das erste Ergebnis, wenn man danach sucht.

django-admin-genericfk macht genau das, was Sie brauchen.

    
WhyNotHugo 24.09.2015 10:04
quelle
0

django-admin-genericfk funktioniert nicht mit Django 1.9.

Ansonsten habe ich nur folgendes Modul gefunden:

Ссылка

das gut gepflegt aussieht. Unglücklicherweise funktioniert sein JS-Code nicht gut mit der Einrichtung von jQuery (noConflict jQuery) durch Django CMS, daher scheint es, dass dies für mich keine Option ist. Aber es sollte in Ordnung sein, wenn es nicht in den Django CMS-Seiten verwendet wird, sondern im normalen Django-Admin.

    
Risadinha 02.05.2016 10:35
quelle