Django的抽象基类管理员? [英] django admin for abstract base class?
本文介绍了Django的抽象基类管理员?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有汽车-suv /公共汽车模型。
Suppose I have car - suv/bus models.
我想在django管理员(具有名称属性)中列出所有汽车。
当用户单击其中一辆汽车时,它将转到suv或公共汽车模型的相应详细信息页面。
I'd like to list all cars in the django admin (with name attribute).
When user clicks one of the car, it would go to the appropriate detail page of either suv or bus model.
如何创建这样的管理员列表页面?
How do I create a such admin list page?
class Car:
name = models.CharField()
class Meta:
abstract=True
class Suv(Car):
pass
class Bus(Car):
pass
推荐答案
不确定这是否是最好的方法,但请在此处共享我的解决方案。
Not sure this is the best approach, but sharing my solution here.
首先,创建一个数据库视图
First, create a Database View
create view [app_label_model_name] as
select id, name, 1 as car_type
from suv
union
select id, name, 2 as car_type
from bus
order by something;
然后创建非托管模型
class PostBaseView(models.Model):
# this would be CarBaseView, I'm copying my actual code
id = models.IntegerField()
raw_html = models.TextField(null=True)
created_at = models.DateTimeField(primary_key=True)
post_type = models.IntegerField()
class Meta:
managed = False
然后,从管理页面更改基于子类类型的链接。
then, from admin page, change the links based on subclass types.
class ChangeList(ChangeListDefault):
def url_for_result(self, result):
# pk = getattr(result, self.pk_attname)
id = result.id
app_label = result.get_app_label()
model_name = result.get_model_name()
return reverse('admin:%s_%s_change' % (app_label,
model_name),
args=(quote(id),))
class PostBaseViewAdmin(admin.ModelAdmin):
list_display = ['__str__', 'post_type_str']
class Meta:
model = PostBaseView
def get_changelist(self, request, **kwargs):
"""
Returns the ChangeList class for use on the changelist page.
"""
return ChangeList
admin.site.register(PostBaseView, PostBaseViewAdmin)
volla,您有一个管理员可以在一个列表中显示多个子类。
volla you have a admin that shows multiple subclasses at one list.
这篇关于Django的抽象基类管理员?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文