项目升级Django2后存在一些问题,需要适当调试才运行成功,现总结部分如下:
1. cannot import name RegexUrlResolver
from django.urls import RegexURLResolver, RegexURLPattern
修改为
from django.urls.resolvers import URLResolver, URLPattern
2. init() missing 1 required positional argument: ‘on_delete’
在有外键约束(ForeignKey)的字段添加on_delete参数
class ScoreRecord(models.Model):
student = models.ForeignKey(verbose_name='学生', to='Student', on_delete=models.CASCADE)
content = models.TextField(verbose_name='理由')
score = models.IntegerField(verbose_name='分值', help_text='违纪扣分写负值,表现邮寄加分写正值')
user = models.ForeignKey(verbose_name='执行人', to='UserInfo', on_delete=models.CASCADE)
3. Specifying a namespace in include() without providing an app_name is not supported
Django 1版本路由使用如下,在Django 2版本有了改动
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^stark/', site.urls),
url(r'^rbac/', include('rbac.urls',namespace='rbac')),
url(r'^login/', account.login, name='login'),
url(r'^logout/', account.logout, name='logout'),
url(r'^index/', account.index, name='index'),
]
改动后,有两种方案可以使用:
- 方案一:
直接修改项目的urls.py,修改方式为
url(r’^rbac/’, include((’[urlpatterns]’,’[app_name]’),namespace=’[namespace]’)),
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^stark/', site.urls),
url(r'^rbac/', include(('rbac.urls','rbac'),namespace='rbac')),
url(r'^login/', account.login, name='login'),
url(r'^logout/', account.logout, name='logout'),
url(r'^index/', account.index, name='index'),
]
- 方案二:
项目中的urls.py不变动,修改应用的urls.py,在urlpatterns前面添加app_name
app_name='rbac'
urlpatterns = [
url(r'^role/list/$', role.role_list, name='role_list'), # rbac:role_list
url(r'^role/add/$', role.role_add, name='role_add'), # rbac:role_add
url(r'^role/edit/(?P<pk>\d+)/$', role.role_edit, name='role_edit'), # rbac:role_edit
url(r'^role/del/(?P<pk>\d+)/$', role.role_del, name='role_del'), # rbac:role_del
]