[英]Extending User Model Twice?
注意 - 我不確定是否允許這類問題,如果沒有,我會道歉。
您好,所以到目前為止我一直在使用Django-Allauth在我的網站上進行注冊,但我發現它非常有限,因此我決定為該網站開發自己的注冊系統。 在這個階段,我希望有兩種不同的注冊表單,我的問題/關注點是我應該如何最好地擴展用戶模型。 我應該有兩個具有一對一字段的模型,還是應該有兩個不與用戶模型連接的模型,只需在注冊視圖中放置兩個表單(一個用於用戶mnodel和自定義字段)或也許是一種完全不同的方法。 下面是我一直在玩的代碼,但對我應該做的一些建議將不勝感激! 干杯
楷模 -
class StudentForm(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
test = models.CharField(max_length=10)
class EmployerForm(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
tester = models.CharField(max_length=20)
管理員 -
from django.contrib import admin
from models import StudentForm, EmployerForm
class StudentFormAdmin(admin.ModelAdmin):
list_display = ["__unicode__"]
class Meta:
model = StudentForm
class EmployerFormAdmin(admin.ModelAdmin):
list_display = ["__unicode__", "tester"]
class Meta:
model = StudentForm
admin.site.register(StudentForm, StudentFormAdmin)
admin.site.register(EmployerForm, EmployerFormAdmin)
錯誤 -
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/registration/studentform/
Django Version: 1.9.1
Python Version: 2.7.10
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'main',
'listings',
'profiles',
'allauth',
'allauth.account',
'allauth.socialaccount',
'registration')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "C:\Python27\Lib\site-packages\django\core\handlers\base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "C:\Python27\Lib\site-packages\django\core\handlers\base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python27\Lib\site-packages\django\contrib\admin\options.py" in wrapper
541. return self.admin_site.admin_view(view)(*args, **kwargs)
File "C:\Python27\Lib\site-packages\django\utils\decorators.py" in _wrapped_view
149. response = view_func(request, *args, **kwargs)
File "C:\Python27\Lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "C:\Python27\Lib\site-packages\django\contrib\admin\sites.py" in inner
244. return view(request, *args, **kwargs)
File "C:\Python27\Lib\site-packages\django\utils\decorators.py" in _wrapper
67. return bound_func(*args, **kwargs)
File "C:\Python27\Lib\site-packages\django\utils\decorators.py" in _wrapped_view
149. response = view_func(request, *args, **kwargs)
File "C:\Python27\Lib\site-packages\django\utils\decorators.py" in bound_func
63. return func.__get__(self, type(self))(*args2, **kwargs2)
File "C:\Python27\Lib\site-packages\django\contrib\admin\options.py" in changelist_view
1468. self.list_max_show_all, self.list_editable, self)
File "C:\Python27\Lib\site-packages\django\contrib\admin\views\main.py" in __init__
79. self.get_results(request)
File "C:\Python27\Lib\site-packages\django\contrib\admin\views\main.py" in get_results
174. result_count = paginator.count
File "C:\Python27\Lib\site-packages\django\core\paginator.py" in _get_count
72. self._count = self.object_list.count()
File "C:\Python27\Lib\site-packages\django\db\models\query.py" in count
371. return self.query.get_count(using=self.db)
File "C:\Python27\Lib\site-packages\django\db\models\sql\query.py" in get_count
483. number = obj.get_aggregation(using, ['__count'])['__count']
File "C:\Python27\Lib\site-packages\django\db\models\sql\query.py" in get_aggregation
464. result = compiler.execute_sql(SINGLE)
File "C:\Python27\Lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
848. cursor.execute(sql, params)
File "C:\Python27\Lib\site-packages\django\db\backends\utils.py" in execute
79. return super(CursorDebugWrapper, self).execute(sql, params)
File "C:\Python27\Lib\site-packages\django\db\backends\utils.py" in execute
64. return self.cursor.execute(sql, params)
File "C:\Python27\Lib\site-packages\django\db\utils.py" in __exit__
95. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Python27\Lib\site-packages\django\db\backends\utils.py" in execute
64. return self.cursor.execute(sql, params)
File "C:\Python27\Lib\site-packages\django\db\backends\sqlite3\base.py" in execute
323. return Database.Cursor.execute(self, query, params)
Exception Type: OperationalError at /admin/registration/studentform/
Exception Value: no such table: registration_studentform
我建議更直接和擴展用戶模型的django方式:
from django.db.models.signals import post_save
from django.contrib.auth.models import User
USER_ROLE_STUDENT = 1
USER_ROLE_EMPLOYER = 2
USER_ROLES = (
(USER_ROLE_STUDENT, 'Student'),
(USER_ROLE_EMPLOYER, 'Employer'),
)
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='user_profile')
role = models.PositiveIntegerField(choices=USER_ROLES, default=USER_ROLE_STUDENT)
test = models.CharField(max_length=10)
def create_user_profile(sender, instance, created, **kwargs):
profile, created = UserProfile.objects.get_or_create(user=instance)
if created:
profile.save()
post_save.connect(create_user_profile, sender=User)
關於你的錯誤......我想這是因為你還沒有完成遷移。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.