我试图在Django中扩展User
。新的User
应该具有比内置User
更多的属性,并且在注册期间应该需要其中一些属性。此外,我希望在Admin
中看到这种新类型的用户。我已经关注了官方教程和this YouTube视频,但有一个error
。
我是Django的新手,所以我无法找到问题所在。你知道什么是错的吗?
编辑:我已尝试停止服务器和makemigrations
- 发生了同样的错误。
CMD:
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages\venv\
lib\site-packages\django\core\urlresolvers.py", line 417, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages\venv\
lib\site-packages\django\utils\functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages\venv\
lib\site-packages\django\core\urlresolvers.py", line 410, in urlconf_module
return import_module(self.urlconf_name)
File "c:\python27\Lib\importlib\__init__.py", line 37, in import_module
__import__(name)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages\Solut
ionsForLanguagesProject\urls.py", line 22, in <module>
url(r'^admin/', admin.site.urls),
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages\venv\
lib\site-packages\django\contrib\admin\sites.py", line 303, in urls
return self.get_urls(), 'admin', self.name
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages\venv\
lib\site-packages\django\contrib\admin\sites.py", line 287, in get_urls
url(r'^%s/%s/' % (model._meta.app_label, model._meta.model_name), include(mo
del_admin.urls)),
AttributeError: 'UserProfile' object has no attribute 'urls'
MODELS.PY:
...
from django.db.models.signals import post_save
...
class UserProfile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
first_name = models.CharField(max_length=40)
surname = models.CharField(max_length=40)
email = models.EmailField()
telephone = models.CharField(max_length=40)
def __unicode__(self):
return '{} {}'.format(self.first_name,self.surname)
def create_profile_user_callback(sender,instance, **kwargs):
profile, new = UserProfile.objects.get_or_create(user=instance)
post_save.connect(create_profile_user_callback, User)
ADMIN.PY:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from models import *
from .models import UserProfile
admin.site.register(AdminContact)
class UserProfileInline(admin.StackedInline):
model = UserProfile
can_delete = False
verbose_name_plural = 'User_Profile'
class UserAdmin(BaseUserAdmin):
inlines = (UserProfileInline, )
admin.site.unregister(User)
admin.site.register(User,UserProfile)
URLS.PY:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^about', TemplateView.as_view(template_name='static/about-us.html')),
url(r'^terms-and-conditions', TemplateView.as_view(template_name='static/terms-and-conditions.html')),
url(r'^faq', TemplateView.as_view(template_name='static/faq.html')),
url(r'^$', views.index),
url(r'^contact-us', views.contact_us),
]
registration_patterns = [
url(r'register', views.register),
url(r'register_success', views.register_success),
]
urlpatterns += registration_patterns
答案 0 :(得分:4)
在admin.py中,您正在注册UserProfile 模型作为用户的管理员;我怀疑你打算注册modeladmin:
admin.site.register(User,UserAdmin)
(注意虽然默认用户已经包含first_name,last_name和email,所以我不知道为什么你在UserProfile模型中复制了它们。)
答案 1 :(得分:1)
我遇到了同样的问题。我通过在admin.py文件中注册这两个模型来修复它,即
admin.site.register(User)
admin.site.register(UserAdmin)