Django3.2正式发布!附中⽂⽂档链接地址!
中⽂⽂档地址如下所⽰:
回到正题,那么Django 3.2到底有哪些主要变化呢?
Python版本兼容性
Django 3.2⽀持Python 3.6, 3.7, 3.8和3.9。升级Django版本的同志们别忘了也升级下Python版本。
相关阅读
AppConfig⾃动发现
Django 3.2之前,如果你对⼀个app修改了相应配置,应该将app1.apps.App1Config类加⼊到INSTALLED_APP中去,⽽不是直接添加app名。Django 3.2⽀持AppConfig名⾃动发现,这也就意味着如果不管你以后是否修改⼀个app的配置,你以后只需要在
INSTALLED_APP中添加app名即可。
相关阅读
定制⾃动创建主键类型
当你定义⼀个模型的时候,如果你没有使⽤primary_key=True指定⼀个主键,Django会⾃动为你创建⼀个主键。Django 3.2之前默认使⽤的⾃增主键AutoField, Django 3.2及以后将会默认使⽤BigAutoField。如果你想依然使⽤AutoField,你可以修改配置⽂件。
DEFAULT_AUTO_FIELD = 'dels.AutoField'
或者在app层⾯进⾏配置。
from django.apps import AppConfig
class MyAppConfig(AppConfig):
default_auto_field = 'dels.AutoField'
name = 'my_app'
新增函数索引
这条⾮常有⽤。对于频繁查询的字段,建议在模型的Meta选项⾥定义indexes索引。Django 3.2将⽀持使⽤函数表达式创建索引。
from django.db import models
from dels import F, Index, Value
from dels.functions import Lower, Upper
class MyModel(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
height = models.IntegerField()
weight = models.IntegerField()
class Meta:
indexes = [
Index(
Lower('first_name'),
Upper('last_name').desc(),
name='first_last_name_idx',
),
Index(
F('height') / (F('weight') + Value(5)),
name='calc_idx',
),
]
相关阅读
Admin新增@display和@actions两个装饰器
在Django 3.2之前,如果你要在admin中⾃定义display选项,你可以通过点号. 设置排序字段及简短描述。
def is_published(self, obj):
return obj.publish_date is not None
is_published.boolean = True
is_published.admin_order_field = '-publish_date'
is_published.short_description = 'Is Published?'
在Django 3.2以后,你可以使⽤@display装饰器添加描述。
@admin.display(
boolean=True,
ordering='-publish_date',
description='Is Published?',
)
def is_published(self, obj):
return obj.publish_date is not None
django admin 自定义页面在Django 3.2之前,如果你要在admin中⾃定义actions,你可以通过点号. 设置所需的权限及简单描述。
def make_published(self, request, queryset):
queryset.update(status='p')
make_published.allowed_permissions = ['publish']
make_published.short_description = 'Mark selected stories as published'
在Django 3.2中,你可以直接通过@action装饰器来给你的⾃定义action添加权限和描述。
@admin.action(
permissions=['publish'],
description='Mark selected stories as published',
)
def make_published(self, request, queryset):
queryset.update(status='p')
相关阅读
智能分页
Django 3.2之前的Paginator类将连续输出所有页码,⾮常不智能。Django 3.2新增get_elided_page_range⽅法。_elided_page_range(number, *, on_each_side=3, on_ends=2)¶
使⽤该⽅法将输出如下页码范围,更容易使⽤。
[1, 2, '…', 7, 8, 9, 10, 11, 12, 13, '…', 49, 50]
相关阅读
其它微⼩变化
新增对pymemcache的⽀持
autocompletefields⽀持limited_choices_to选项
新增 no_append_slash装饰器
⼯具部分新增django.utils.timesince.timesince()和django.utils.timesince.timeuntil(),⽤于计算与当前时间差。江哥点评
可惜Django 3.2在异步上还是没有更近⼀步的突破,这块变化只能等到Django 4以后了。真⼼希望Django以后越来越好!⼤江狗
2021.4
相关阅读
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论