0
点赞
收藏
分享

微信扫一扫

Django2版本中的一些变化


项目升级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
]


举报

相关推荐

0 条评论