django admin 的抽象基类?

2024-02-25

假设我有轿车 - SUV/巴士车型。

我想列出 django 管理中的所有汽车(带有名称属性)。
当用户点击其中一辆汽车时,它将转到SUV或巴士型号的相应详细信息页面。

如何创建这样的管理列表页面?

class Car:

    name = models.CharField()

    class Meta:
        abstract=True


class Suv(Car):

    pass

class Bus(Car):

    pass

不确定这是最好的方法,但在这里分享我的解决方案。

首先,创建数据库视图

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

然后,从管理页面,根据子类类型更改链接。

 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 您有一个管理员,可以在一个列表中显示多个子类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django admin 的抽象基类? 的相关文章

随机推荐