Django2.0更新内容记录

Django 2.0 变更内容(不按版本敲着实是有点坑o(╥﹏╥)o)

外键

Django 1.9在创建models.ForeignKey外键时,可写成

1
topic = models.ForeignKey(Topic)

Django 2.0需要多传一个字段on_delete,且可给定默认值models.CASCADE
所以上述可写为:

1
topic = models.ForeignKey(Topic,on_delete=models.CASCADE)

指定app_name

Django 1.9在映射URL时,工程的urls.py可写成:

1
2
3
4
5
6
7
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
path('admin/', admin.site.urls),
path('',include('learning_logs.urls', namespace='learning_logs'))
]

应用的urls.py可写成:

1
2
3
4
5
6
7
8
"""定义learning_logs的URL模式"""
from django.urls import path
from . import views

urlpatterns = [
#主页
path('', views.index, name='index')
]

该写法在Django 2.0中会出现报错:

1
2
'Specifying a namespace in include() without providing an app_name '
django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.

意思是缺少了app_name,所以需要指定app_name,我的做法是在应用的urls.py文件中指定app_name,也就是工程的urls.py保持不变,应用的urls.py增加app_name指定:

1
2
3
4
5
6
7
8
9
"""定义learning_logs的URL模式"""
from django.urls import path
from . import views

app_name = 'learning_logs'
urlpatterns = [
#主页
path('', views.index, name='index')
]

映射URL

对于django.urls.path()函数,允许有简单的表示方法:

1
url(r’^articles/(?P[0-9]{4})/$’, views.year_archive),

可以写成:

1
path(‘articles//‘, views.year_archive),

用法参见前博客记录

文章目录
  1. 外键
  2. 指定app_name
  3. 映射URL
|