def delete_model(self, request, obj)
def delete_queryset(self, request, queryset)
def get_search_results(self, request, queryset, search_term) # Use other search engines Haystack
def save_related(self, request, form, formsets, change)
def get_autocomplete_fields(self, request) # 该方法返回list或tuple的字段名称,该字段名称将与自动完成小部件一起显示 。
def get_readonly_fields(self, request, obj=None) # 该方法返回将显示为只读的字段名称的list或tuple
def get_exclude(self, request, obj=None) # 该方法返回exclude的字段列表
def get_fields(self, request, obj=None) # 返回fields。
def get_fieldsets(request, obj=None) # 该方法返回一个二元列表,fieldsets
def get_list_filter(self, request) # 返回list_filter。
def get_list_display(self, request) # 该方法返回list或tuple的字段名称,该名称将显示在更改列表视图中
def get_list_select_related(self, request) # return a list or tuple
def get_list_display_links(request, list_display) # 返回将链接到变更视图的变更列表中的一个None或一个list或tuple多个字段名称
def get_sortable_by(self, request) # 返回一个集合(如list,tuple或set)字段名,通过该集合进行排序。
def get_inline_instances(self, request, obj=None) # return a list or tuple of InlinesModelAdmin
def get_inlines(self, request, obj) # You can override this method to dynamically add inlines
# Permissions related
def has_add_permission(self, request) # 是否具有添加数据的权限。如果允许添加对象,应返回 True,否则应返回 False。
def has_view_permission(self, request, obj=None) # 如果允许查看 obj,应返回 True,否则应返回 False。如果 obj 为 None,则应返回 True 或 False 以指示是否允许查看此类型的对象(例如,False 将解释为不允许当前用户查看此类型的任何对象),如果用户具有"更改"或"查看"权限,则默认实现将返回 True。
def has_change_permission(self, request, obj=None) # 是否具有change权限。 如果允许编辑 obj,应返回 True,否则应返回 False。如果 obj 为"无",则应返回 True 或 False 以指示通常是否允许编辑此类型的对象
def has_delete_permission(self, request, obj=None) # 是否具有delete权限。 如果允许删除 obj,应返回 True,否则应返回 False。如果 obj 为"无",则应返回 True 或 False 以指示通常是否允许删除此类型的对象。
def has_module_permission(self, request)# 如果允许在管理页上显示模块并访问模块,则应返回 True,否则为 False。默认情况下使用 User.has_module_perms() 。虽然设置为True后不显示该模块,但是通过url依然可以访问。
# Other view methods
def add_view(self, request, form_url='', extra_context=None)
def change_view(self, request, object_id, form_url='', extra_context=None)
def changelist_view(self, request, extra_context=None)
def delete_view(self, request, object_id, extra_context=None)
def history_view(self, request, object_id, extra_context=None)
'对展示的数据进行过滤'
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
else: #不是超级管理员,只展示跟跟自己场域一样的用户信息
return qs.filter(belong=request.user.belong)
'对展示的字段进行判断'
def get_list_display(self, request):
# 如果是超级管理员,展示养殖场所用信息
if request.user.is_superuser:
return self.list_display
else: #不是超级管理员
list_display=copy.deepcopy(self.list_display)
list_display.remove('id')
list_display.remove('change')
list_display.insert(0,'chakan') #在第一个位置插入‘查看’功能
return list_display
from django.utils.html import format_html
list_display = ['delete','look','xiazai','custom_date']
# model.py中create date = models.DateTimeField(auto now add=True)
def custom_date(self, obj):
return format_html(
'{}',
obj.create_date.strftime("%Y-%m-%d %H:%M:%S")
)
custom_date.short_description = '设置时间的格式和颜色'
def delete(self,obj):
return format_html('删除
',obj.id)
delete.short_description = '删除'
def look(self,obj):
return format_html('查看详细',obj.id)
look.short_description='查看详细'
def xiazai(self,obj):
return format_html('下载
',obj.id)
xiazai.short_description='下载'
#自定义admin后台显示字段
def view_birth_date(self, obj): # 自定义的字段,obj为当前model对象
# Upper是数据库函数,用于将字符串中的小写字母全部转换成大写字母输出
return ("%s %s" % (obj.variety, obj.name)).upper()
def 自定义名称(self,request,queryset):
return TemplateResponse(request, 'actions/form.html', context)
自定义名称.short_description = 'xxxx'
actions = [自定义名称]
def save_model(self, request, obj, form, change):
'''如果直接写代码,这包含增加和修改两个功能,如果需要单独设置则按照下面的写'''
if change: #点击修改执行的下面的代码
obj.user = request.user # 在保存之前执行的操作
print(obj)
super().save_model(request, obj, form, change) # 执行保存
# 此处写保存后需要执行的操作
def save_model(self, request, obj, form, change):
print('查看sava_madel中的obj和self')
print(obj) #obj表示新增的对象,具体值由model中的 def __str__(self) 决定
print(self) # animal.AnimalInfoAdmin
if obj.father ==None:
obj.father=AnimalInfo.objects.get(id=1)
if obj.mother ==None:
obj.mother=AnimalInfo.objects.get(id=2)
super().save_model(request, obj, form, change)
# 预警
if not change: #新增
creat_list = []
# 如果用户是超级管理员,belong为空
belong = None if request.user.is_superuser else request.user.belong
# if request.user.is_superuser:
# belong = None
# else:
# request.user.belong
warning_date=obj.birth_date+datetime.timedelta(days=60)
'新加一个动物信息后,免疫预警信息会批量保存该动物的疫苗信息'
for vaccine in range(1,7):
creat_list.append(
Immunity_Alert_Info( #免疫预警信息
animal=obj, #self_num
immunity_name=vaccine, #免疫名称
belong=belong, #belong在上面的代码中做了判断,如果是超级管理员,belong为空
warning_date=warning_date #预警日期
)
)
warning_date = warning_date + datetime.timedelta(days=60)
# Django批量保存数据库 bulk_create 方法
Immunity_Alert_Info.objects.bulk_create(creat_list)
super().save_model(request, obj, form, change)
def has_add_permission(self, request): #覆盖增加按钮
return False
def has_delete_permission(self, request, obj=None): #覆盖删除按钮
return False
# 在详情页面添加自定义的只读字段
readonly_fields = ('address_report',)
def address_report(self, instance):
return 'xxx'
def delete_model(self, request, obj):
"""
删除单条记录
同时删除配方成分表中的数据
"""
obj.delete()
def delete_queryset(self, request, queryset):
"""Given a queryset, delete it from the database."""
queryset.delete()
'''
超级管理员可以更改只读属性的字段,普通用户不可以!!!
如果需要执行这个功能,则需要将上面readonly_fields = ['sheep_kind','name','weight',]这行代码注释
def get_readonly_fields(self, request, obj=None):
""" 重新定义此函数,限制普通用户所能修改的字段 """
'''
if request.user.is_superuser:
self.readonly_fields = []
return self.readonly_fields
readonly_fields = ('sheep_kind','name','weight',)
'''get_ordering方法将request作为参数,并预期返回一个列表或元组,以便进行类似于ordering属性的排序。'''
def get_ordering(self, request):
if request.user.is_superuser: # 判断是不是超级用户
print('----------')
return ['variety','name',]
else:
return ['name']