Je pense que cela est plus facile à comprendre comme un exemple:Dans l'admin Django est-il possible de séparer les modèles en sous-modèles basés sur des groupes?
J'ai modèles Image
et ImageType
, où l'image et a exactement un type. Les paramètres de ImageType
régiraient la taille de l'image, la taille des vignettes, etc., car les images des galeries photo pourraient différer des images de profil, par exemple.
Je souhaite que les images de profil et les images de galerie apparaissent séparément dans le site d'administration Django. Une option est de faire quelque chose comme ceci:
class ProfileImage (Image):
pass
class GalleryImage (Image):
pass
class ProfileImageAdmin (ImageAdmin):
def queryset(self, request):
qs = super(MyModelAdmin, self).queryset(request)
return qs.filter(type='profile')
class GalleryImageAdmin (ImageAdmin):
def queryset(self, request):
qs = super(MyModelAdmin, self).queryset(request)
return qs.filter(type='gallery')
admin.site.register(ProfileImage, ProfileImageAdmin)
admin.site.register(GalleryImage, GalleryImageAdmin)
Mais en plus d'avoir le code redondant, qui va à l'encontre complètement dans le but d'avoir une base de données pour organiser ces en premier lieu. Une autre option est de perdre mes modèles Image
et ImageType
et de créer des tables séparées presque identiques pour chaque type (par exemple ProfileImage
et GalleryImage
), mais c'est encore pire, car cela obligerait les utilisateurs à avoir accès aux fichiers de configuration, ce qui selon moi presque défait le but d'un CMS.
Y at-il un moyen de faire quelque chose comme ça?
admin.site.register(Image, ImageAdmin, group_by='type')
Sinon, si cela est impossible, quelqu'un a-t-il des suggestions pour d'autres façons d'y remédier? (Par exemple, existe-t-il un moyen en python de créer dynamiquement des classes basées sur la base de données?)
Cheers! Matt
Non il n'y a pas, mais ce que vous pouvez faire est d'ajouter une nouvelle URL avec '' méthode get_urls' sur ModelAdmin' qui indiquerait votre point de vue changelist personnalisé sur la même classe 'ModelAdmin' qui fixerait la queryset à utiliser, et remplacer les administrateurs 'index.html' afin de changer l'apparence de la page de liste des applications d'administration par défaut. –
Je ne sais pas si cela résout votre problème, ou ce que vous devez accomplir avec votre classe 'ImageType', mais si vous ne le savez pas, jetez un oeil à la merveilleuse application photologue (https://code.google .com/p/django-photologue /), qui permet de contrôler les tailles etc confortablement à partir du template alors que l'utilisateur final peut encore spécifier les tailles et beaucoup plus de choses dans l'admin! –