Django 1.11为管理员添加了一个抽象的基础模型



我有一个abstract=True的基本模型。#型号.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管理员添加抽象媒体模型的最佳方式是什么?

subclass  = Media.__subclasses__() 

这将返回介质的所有子类

抽象模型不能直接用于管理

您必须将媒体模型继承到另一个模型,并在没有抽象的情况下创建该模型,然后您可以将子类模型添加到django-admin。

我要做的是使Media成为的主要型号

然后为图像、声音和文档创建代理模型。

这样,您就可以在一个数据库表yourapp_media中获得所有信息,并且您可以拥有一个或三个Admin。

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

在管理员.py 中

admin.site.register(Media, MediaAdmin)
admin.site.register(Image, ImageAdmin)
admin.site.register(Sound, SoundAdmin)
admin.site.register(Document, DocumentAdmin)

最新更新