Ostatecznie, chciałbym włączyć/wyłączyć niektóre pliki javascript na podstawie ... cokolwiek. Samo zdefiniowanie klasy Media nie będzie działać, ponieważ jest oceniane tylko raz.Jak mogę przesłonić właściwość "media" Django ModelAdmin i uczynić ją dynamiczną?
Wiem, że mogę to zrobić, tworząc niestandardowy szablon administratora, ale zastanawiam się, czy istnieje prosty sposób na zrobienie tego po prostu dzięki dynamicznej właściwości mediów.
To, co mam tak daleko:
from django.contrib import admin
class MyModelAdmin(admin.ModelAdmin):
model = MyModel
...
@property
def media(self):
media = super(MyModelAdmin, self).media
if whatever_condition_I_want:
# somehow add "my/js/file3.js"
return media
class Media:
css = {
"all": (
"my/css/file1.css",
"my/css/file2.css",
)
}
js = (
"my/js/file1.js",
"my/js/file2.js",
)
I że prawie działa, ale okazało się, że dzwoni super(MyModelAdmin, self).media
ignoruje definicje nośników moja obecna klasa jest. Przeglądając, stwierdziłem, że dzieje się tak dlatego, że właściwość multimedialna klasy nadrzędnej jest opakowana przez django.forms.widgets.media_property
(przez MediaDefiningClass
), a ponieważ nadpisuję media, moja właściwość multimedialna nie jest pakowana. Próbowałem ręcznie owijać go przez:
from django.forms import media_property
MyModelAdmin.media = media_property(MyModelAdmin)
, ale właściwość media_property nie udało się zaimportować.
W jaki sposób mogę dodać do niego statyczne multimedia i dynamiczne multimedia oraz w jaki sposób mogę dodać moje dynamiczne multimedia w sposób, z którego django jest zadowolony?