问题描述:
我有个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 Model:
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
# AbstractUser这个类,也就是Django框架默认使用的一个用于管理用户的User类,
这个类生成一个auth_user表。所以,要扩展用户属性,可以继承AbstractUser,
在子类UserModel中实现扩展。
nick_n
必须在settings中配置AUTH_USER_MODEL
# 覆盖默认的用户模型,使用自定义用户模型,语法:'app的名称.自定义用户模型的名称'
AUTH_USER_MODEL = 'admi.UserModel'
Django自带的admin管理后台简直是个bug级的存在, 几行代码就可以撸出一个功能齐全的管理后台来。小编我今天就带你看下Django自带的admin有哪些高级用法值得掌握。本文建议...
参考上篇博文,我们利用了OneToOneField的方式使用了django自带的user,http://www.cnblogs.com/caseast/p/5909248.html , 但这么用有个问题,就是每次增删改查数据,因为有外键的存在都要查询两次(当然可以用select_related方式减少查询次数,参考: Django models对象的select_related方法(减少查询次数) ),另外在admin中需要维护2张表,先创建User,再在UserProfile中进行关联操作。
class Asset(BaseModel):
"""资产信息model"""
type = models.ForeignKey(AssetType, on_delete=models.CASCADE, verbose_name="资产类型")
name = models.CharField(verbose_name="资产名称", max_length=50)
先说需求:
1、django 自带了admin后管,如果我们需要使用,只需把我们定义的models注册即可;
2、但如果只是简单注册,那显示的很简单,根本看不到每行记录的描述信息,全部以model object 形式显示,必须点击进去也能看到信息,太不方便,如下图:
1、显示关键信息
效果如下图,这样就好看多啦。
在 admin.py 文件中配置一下就行。
admi...
1.首先在models.py中编写扩展User所用到的userProfile模型及下拉框和多选框选项值所需要的模型(因为我所做的下拉框和多选框的值都是从数据库里面取得),代码如下:
2.第二步编写admin.py对User字段进行扩展,代码如下:
# -*- coding: UTF-8 -*-
from django.contrib import admin
from django impo
django admin 后台默认的样式可能不满足我们的需求,这个时候,我们就需要重写默认的样式。
我找到的有两种方法,其中一种(formfield_overrides)只能针对某种字段类型,不能指定字段。这里只介绍另一种,可以指定具体哪个字段。
这里只实现了提示信息,当然还可以设置输入框长度、宽度等。
1、使用前
2、使用后
3、实现代码
admin.py
@admin.register(models.WarnUser)
class WarnUserAdmin(adm
修改管理页面所显示的字段需要在该app的文件夹下增加admin.py,然后在admin.py中register模型,当模型修改之后需重新注册,unregister之后再register
对admin页面显示的修改,需要使用ModelAdmin类,ModelAdmin有一些选项可供调节,我一直对field和list_display有一些分不清,后来自己试了一下发现:
fileds字段控制“修改添
1)打开booktest/admin.py文件,修改AreaAdmin类如下:
class BookInfoAdmin(admin.ModelAdmin):
list_per_page = 2
2)在浏览器中查看区域信息的列表页面,效果如下图:...
默认情况下,ModelAdmin只允许您管理模型“本身”字段,而不是相关模型.以下方法将实现,在应用类的列表管理显示页面,显示父表的字段;在编辑页面,父表对子表进行编辑.
models.py如下
class Level(models.Model):
# l_num = models.IntegerField(default=0, verbose_name='序号')
name = ...
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),]
2.seetings.py
INSTALLED_APPS = [
'django.contrib.admin',]
二、从app里面写好自定义...
1.Category与Blog是一对多关系:Category对象实例获取关联的Blog对象
category.blog_set
category.blog_set.count() #获取关联的Blog对象的数量
2.Tag与Blog是多对多关系:
tag.blog_set.count() #获取Tag关联的所有Blog对象的数量
tag_list = blog.tag.all()
class Bl...