Django项目开发中的6个实用小技巧

Django项目开发中的实用小技巧,提高项目开发的效率。如果觉得使用可以分享给更多人,如果您有其他小技巧也可以留言分享给大家!谢谢!

  1. 如何快速获取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')>>> 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 admin
@admin.register(admin.models.LogEntry)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.如何将自定义操作添加到日志中?

from django.contrib.admin.models import LogEntry, CHANGEfrom django.contrib.contenttypes.models import ContentType
def make_checked(modeladmin, request, queryset):    queryset.update(checked = 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 ...") make_checked.short_description = '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 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

all_models = apps.get_app_config('blog').get_models()for model in all_models:    try:        admin.site.register(model)    except:        pass
THE END