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

2024-03-1521:19:54后端程序开发Comments937 views字数 2549阅读模式

Django项目开发中的实用小技巧,提高项目开发的效率。如果觉得使用可以分享给更多人,如果您有其他小技巧也可以留言分享给大家!谢谢!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.html

  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选项的方法来设计数据库文章源自菜鸟学院-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.html

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.如何将自定义操作添加到日志中?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.html

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 用户权限配置显示中文设置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.html

class 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.html

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文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.html

all_models = apps.get_app_config('blog').get_models()for model in all_models:    try:        admin.site.register(model)    except:        pass
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62292.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/62292.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定