2017-08-11 103 views
2

在我的django应用程序中,我创建了一个自定义用户模型,它扩展了AbstractUser。我更新了AUTH_USER_MODEL和管理下注册它像这样通过管理员创建新用户时发生NoReverseMatch错误

admin.site.register(MyUser, UserAdmin)

我跑了迁移,然后在我的管理页面去了,看到它在应用程序的车型上市。但是当我尝试从该页面创建一个新用户时,它给了我这个错误。

enter image description here

用户类models.py:

class MyUser(AbstractUser): 
    id = models.CharField(primary_key = True, unique = True, max_length = 50) 

任何想法? 编辑:更新,包括主urls.py

from django.conf.urls import url, include 
from django.contrib import admin 

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^api/', include('api.urls')) 
]  

编辑2:更新,包括堆栈跟踪

Internal Server Error: /admin/api/myuser/add/ 
Traceback (most recent call last): 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner 
    response = get_response(request) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/contrib/admin/options.py", line 551, in wrapper 
    return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/utils/decorators.py", line 149, in _wrapped_view 
    response = view_func(request, *args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func 
    response = view_func(request, *args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/contrib/admin/sites.py", line 224, in inner 
    return view(request, *args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/utils/decorators.py", line 67, in _wrapper 
    return bound_func(*args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/views/decorators/debug.py", line 76, in sensitive_post_parameters_wrapper 
return view(request, *args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/utils/decorators.py", line 63, in bound_func 
    return func.__get__(self, type(self))(*args2, **kwargs2) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/utils/decorators.py", line 67, in _wrapper 
    return bound_func(*args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/utils/decorators.py", line 149, in _wrapped_view 
    response = view_func(request, *args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/utils/decorators.py", line 63, in bound_func 
    return func.__get__(self, type(self))(*args2, **kwargs2) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/contrib/auth/admin.py", line 103, in add_view 
    return self._add_view(request, form_url, extra_context) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/contrib/auth/admin.py", line 131, in _add_view 
extra_context) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1508, in add_view 
    return self.changeform_view(request, None, form_url, extra_context) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/utils/decorators.py", line 67, in _wrapper 
    return bound_func(*args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/utils/decorators.py", line 149, in _wrapped_view 
    response = view_func(request, *args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/utils/decorators.py", line 63, in bound_func 
    return func.__get__(self, type(self))(*args2, **kwargs2) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1408, in changeform_view 
    return self._changeform_view(request, object_id, form_url, extra_context) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1453, in _changeform_view 
    return self.response_add(request, new_object) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/contrib/auth/admin.py", line 211, in response_add 
post_url_continue) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1052, in response_add 
current_app=self.admin_site.name, 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/urls/base.py", line 91, in reverse 
return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/urls/resolvers.py", line 497, in _reverse_with_prefix 
    raise NoReverseMatch(msg) 
django.urls.exceptions.NoReverseMatch: Reverse for 'api_myuser_change' with arguments '('',)' not found. 1 pattern(s) tried: ['admin/api/myuser/(.+)/change/$'] 

编辑3:INSTALLED_APPS

INSTALLED_APPS = [ 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'rest_framework', 
'rest_framework.authtoken', 
'api', 
'django_jinja', 
] 
+0

你有没有尝试从python shell创建用户? –

+0

@BillF它似乎成功了,但是当我进入管理员用户不在那里。让我觉得我没有正确注册自定义用户类? – aidnani8

+0

这就是你的代码中缺少一个参数。仔细检查你的意见。 –

回答

5

你”已经用CharF替换了你的主键但你仍然在使用Django的UserAdmin ModelAdmin。 Django的UserAdmin不会要求输入ID - 它默认为空字符串。 (您可以通过检查来自NoReverseMatch异常的参数中的空字符串来验证这一点。)

您需要创建一个ModelAdmin,它允许您指定ID,因此它不会以空字符串结尾。以下admin.py将允许您指定ID,从而摆脱NoReverseMatch异常。

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 

from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin 

from .models import MyUser 

class MyUserAdmin(UserAdmin): 
    add_fieldsets = (
     (None, { 
      'fields': ('id', 'username', 'password1', 'password2'), 
     }), 
    ) 

# Register your models here. 
admin.site.register(MyUser, MyUserAdmin) 
0

你必须注册在管理网站的型号

from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin 
from .models import User 

admin.site.register(User, UserAdmin) 

你也必须有一个ID您的模型整数

class MyUser(AbstractUser): 
    pass 
0

错误消息显示网址为/myuser/add和你的网址说它只有/myuser/change/定义。定义/myuser/add类/函数视图或更新url以指向add类/函数视图。

相关问题