在Django管理中,是否可以根据组将模型分为子模型?

在Django管理中,是否可以根据组将模型分为子模型?,django,django-models,django-admin,Django,Django Models,Django Admin,我认为这是最容易理解的一个例子: 我有型号Image和ImageType,其中和Image只有一种类型。ImageType中的参数将调节图像大小、缩略图大小等,因为照片库图像的显示方式可能不同于(比如)个人资料图像 我希望个人资料图像和画廊图像显示为单独的模型在Django管理网站。一种选择是这样做: class ProfileImage (Image): pass class GalleryImage (Image): pass class ProfileImageAdmi

我认为这是最容易理解的一个例子:

我有型号
Image
ImageType
,其中和Image只有一种类型。
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)
但是除了有冗余代码之外,这完全违背了一开始就用数据库来组织这些代码的目的。另一种选择是丢失我的
图像
图像类型
模型,并为每种类型创建单独的几乎相同的表(即
ProfileImage
GalleryImage
),但这更糟糕,因为这需要用户访问配置文件,在我看来,这几乎违背了CMS的目的

我有办法做这样的事吗

admin.site.register(Image, ImageAdmin, group_by='type')
或者,如果这是不可能的,有没有人对我解决这个问题的其他方法有什么建议?(例如,python中是否有基于数据库动态创建类的方法?)

干杯!
马特

有办法。这涉及对一种(或两种)图像类型使用模型。然后,您可以为这两者添加单独的管理员。例如

# models.py
class ProfileImage (Image):
    class Meta:
        proxy = True

class GalleryImage (Image):
    class Meta:
        proxy = True
这将避免创建新表。您仍将在表中存储与
图像
模型对应的所有数据。然后,您可以为这些代理注册两个不同的管理员

# admin.py
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)

没有,但是您可以使用
ModelAdmin
上的
get\u url
方法添加一个新url,该方法将指向同一
ModelAdmin
类上的自定义变更列表视图,该类将设置要使用的查询集,并重写admins
index.html
,以更改默认管理员应用程序列表页面的外观。我不知道它是否解决了您的问题,或者您需要使用
ImageType
-类实现哪些功能,但如果您不知道,请查看精彩的photologue应用程序(),这允许控制大小等舒适的模板,而最终用户仍然可以指定的大小和更多的事情在管理!谢谢这并不完全是我所希望的,但它比我以前拥有的要好,而且看起来这是最好的。再次感谢!