Django项目开发中的实用小技巧,提高项目开发的效率。如果觉得使用可以分享给更多人,如果您有其他小技巧也可以留言分享给大家!谢谢!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.html
- 如何快速获取models模型choices值?
from django.db import models
class Person(models.Model):
SHIRT_SIZES = (
('S', 'Small'),
('M', 'Medium'),
('L', 'Large'),
)
name = models.CharField(max_length=60)
shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES,default='S')
"Fred Flintstone", shirt_size="L") > p = Person(name=
> p.save()
> p.shirt_size
'L'
> p.get_shirt_size_display()
'Large'
在Django的models里经常使用choices选项的方法来设计数据库文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.html
上述代码中的get_shirt_size_display()即可获取choices中的值
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.html
模板里获取 choice 显示的值:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.html{{ get_shirt_size_display }}
2.django项目在admin中主动显示日志文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.htmlfrom django.contrib import admin
class LogEntryAdmin(admin.ModelAdmin):
"""
该类用于显示 admin 内置的 django_admin_log 表。
其中,content_type 是指用户修改的 Model 名
"""
list_display = ['action_time', 'user', 'content_type', '__str__']
list_display_links = ['action_time']
list_filter = ['action_time', 'content_type', 'user']
list_per_page = 20
readonly_fields = ['action_time', 'user', 'content_type',
'object_id', 'object_repr', 'action_flag', 'change_message']
3.如何将自定义操作添加到日志中?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.htmlfrom django.contrib.admin.models import LogEntry, CHANGE
from django.contrib.contenttypes.models import ContentType
def make_checked(modeladmin, request, queryset):
1) =
ct = ContentType.objects.get_for_model(queryset.model)
for obj in queryset:
LogEntry.objects.log_action(
user_id=request.user.id,
content_type_id=ct.pk,
object_id=obj.pk,
object_repr=obj.description,
action_flag=CHANGE,
change_message="You have ...")
'Mark selected products as checked' =
4.django admin 用户权限配置显示中文设置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.htmlclass Permission(models.Model):
class Meta:
#权限信息,这里定义的权限的名字,后面是描述信息,描述信息是在django admin中显示权限用的
permissions = (
('add_department', '新增部门'), # add_department 新增部门
('change_department', '修改部门'), # change_department 修改部门
('delete_department', '删除部门'), # delete_department 删除部门
... # 想修改其他模型类似 部门
)
5.Django获取应用下的所有models文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.htmlfrom django.apps import apps
apps.get_models() # 获取所有的models,包含Django自带的
apps.get_app_config('blog') # 获取blog的配置
# <BlogConfig: blog>
apps.get_app_config('blog').models
# OrderedDict([('tag', <class 'app_blog.blog.models.Tag'>), ('category', <class 'app_blog.blog.models.Category'>)])
apps.get_app_config('blog').get_models() # 获取所有的models
# <generator object AppConfig.get_models at 0x00000263BC3A2C78>
list(apps.get_app_config('blog').get_models()) # 遍历所有的models
# [<class 'app_blog.blog.models.Tag'>, <class 'app_blog.blog.models.Category'>, ...]
apps.get_app_config('blog').get_model('Article')._meta.verbose_name # 获取models的名称
# '文章'
6.admin下快速遍历注册models文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.htmlall_models = apps.get_app_config('blog').get_models()
for model in all_models:
try:
admin.site.register(model)
except:
pass