Я думаю, что это проще всего понять в качестве примера:
У меня есть модели Image
и ImageType
, где и изображение имеет только один тип. Параметры в ImageType
будут регулировать размер изображения, размер эскиза и т. Д., Так как изображения в фотогалерее могут отображаться иначе, чем, скажем, изображения профиля.
Я хочу, чтобы изображения профиля и изображения галереи отображались в виде отдельных моделей на сайте администратора Django. Один из вариантов - сделать что-то вроде этого:
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)
Но помимо наличия избыточного кода, это полностью сводит на нет цель иметь базу данных для их организации в первую очередь. Другой вариант - потерять мои модели Image
и ImageType
и создать отдельные почти идентичные таблицы для каждого типа (т. Е. ProfileImage
и GalleryImage
), но это еще хуже, поскольку это потребует от пользователей доступа конфигурационные файлы, которые, по моему мнению, почти побеждают цель CMS.
Есть ли способ, которым я могу сделать что-то подобное?
admin.site.register(Image, ImageAdmin, group_by='type')
В качестве альтернативы, если это невозможно, есть ли у кого-нибудь предложения о других способах решения этой проблемы? (Например, есть ли в python способ динамически создавать классы на основе базы данных?)
Ура!
Matt