Django Admin 中通过 Inline 显示继承模型额外字段
本文介绍在 Django Admin 的修改或添加表单界面中,如何显示继承自父模型的额外字段。通过定义 BlogExtraInline 内联类,并在 BlogAdmin 的 get_form 方法中根据是否存在继承记录动态切换内联配置,实现仅在有额外数据时展示对应字段。
Django Admin 显示继承模型额外字段的方法
问题描述:
我有一个 blogextra 表继承自 blog,现在希望在 blog 的 admin 管理 change 界面显示对应的 blogextra 字段。
解决方法:
可以使用 admin.py 的 inline 内联方法。
代码:
models.py
from django.db import models
# Create your models here.
class Blog(models.Model):
Name = models.CharField(max_length=350)
def __unicode__(self):
return str("Name:"+self.Name)
class BlogExtra(Blog):
NameTwo = models.CharField(max_length=350)
NameThree = models.CharField(max_length=350)
def __unicode__(self):
return str("Name:"+self.Name+" NameTwo:"+self.NameTwo+" NameThree:"+self.NameThree)
admin.py
# conding = UTF-8
from django.contrib import admin
from blogs.models import *
class BlogExtraInline(admin.StackedInline):
model = BlogExtra
fields = ['NameTwo'] #只显示NameTwo这个字段
class BlogAdmin(admin.ModelAdmin):
list_display = ('id', 'Name')
def get_form(self, request, obj=None, **args):
defaults = {}
if obj is not None:
if (len(BlogExtra.objects.filter(id=obj.id)) == 1):
self.inlines = [BlogExtraInline] #设置内联
else:
self.inlines = [] #如果不是继承,就取消设置
defaults.update(args)
return super(BlogAdmin, self).get_form(request, obj, **defaults)
admin.site.register(Blog, BlogAdmin)
展示效果:
正常无继承的:

存在继承的(显示额外字段):

以上这篇 Django admin.py 在修改/添加表单界面显示额外字段的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













