我有一个抽象= True的基础模型。 #models.py
class Media(models.Model):
title = models.CharField(unique = True, max_length=200)
excerpt = RichTextField(config_name = 'extralight', blank=True, null=True)
class Meta:
abstract = True
模型图像,声音和文档是媒体模型的子类。我想获得所有媒体模型列表。
将抽象媒体模型添加到django admin的最佳方法是什么?
答案 0 :(得分:0)
subclass = Media.__subclasses__()
这将返回Media
的所有子类抽象模型不能直接用于管理员。
你必须将Media模型继承到另一个模型并创建没有抽象的模型然后你可以将子类模型添加到django admin。
答案 1 :(得分:0)
我要做的是将Media作为主要模型
然后为图像,声音和文档创建代理模型。
通过这种方式,您可以在一个数据库表yourapp_media中获得所有信息,并且您可以拥有一个或三个管理员。
from model_utils.managers import QueryManager
class Media(models.Model):
title = models.CharField(unique = True, max_length=200)
content_type = models.SmallIntegerField(choices=settings.CONTENT_TYPE,editable=False)
def __init__(self, *args, **kwargs):
super(Media, self).__init__(*args, **kwargs)
self.content_type = self.DEFAULT_CONTENT_TYPE
class Image(Media):
DEFAULT_CONTENT_TYPE = settings.IMAGE_TYPE
objects = QueryManager(content_type=settings.IMAGE_TYPE)
class Meta:
proxy = True
class Sound(Media):
DEFAULT_CONTENT_TYPE = settings.SOUND_TYPE
objects = QueryManager(content_type=settings.SOUND_TYPE)
class Meta:
proxy = True
class Document(Media):
DEFAULT_CONTENT_TYPE = settings.DOCUMENT_TYPE
objects = QueryManager(content_type=settings.DOCUMENT_TYPE)
class Meta:
proxy = True
在admin.py
中admin.site.register(Media, MediaAdmin)
admin.site.register(Image, ImageAdmin)
admin.site.register(Sound, SoundAdmin)
admin.site.register(Document, DocumentAdmin)