Django项目开发中的6个实用小技巧
Django项目开发中的实用小技巧,提高项目开发的效率。如果觉得使用可以分享给更多人,如果您有其他小技巧也可以留言分享给大家!谢谢!
- 如何快速获取models模型choices值?
from django.db import modelsclass 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')> p = Person(name="Fred Flintstone", shirt_size="L")> p.save()> p.shirt_size'L'> p.get_shirt_size_display()'Large'
在Django的models里经常使用choices选项的方法来设计数据库
上述代码中的get_shirt_size_display()即可获取choices中的值
模板里获取 choice 显示的值:
{{ get_shirt_size_display }}
2.django项目在admin中主动显示日志
from django.contrib import adminclass 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 = 20readonly_fields = ['action_time', 'user', 'content_type','object_id', 'object_repr', 'action_flag', 'change_message']
3.如何将自定义操作添加到日志中?
from django.contrib.admin.models import LogEntry, CHANGEfrom django.contrib.contenttypes.models import ContentTypedef 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 用户权限配置显示中文设置
class Permission(models.Model):class Meta:#权限信息,这里定义的权限的名字,后面是描述信息,描述信息是在django admin中显示权限用的permissions = (('add_department', '新增部门'), # add_department 新增部门('change_department', '修改部门'), # change_department 修改部门('delete_department', '删除部门'), # delete_department 删除部门... # 想修改其他模型类似 部门)
5.Django获取应用下的所有models
from django.apps import appsapps.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
all_models = apps.get_app_config('blog').get_models()for model in all_models:try:admin.site.register(model)except:pass
THE END




