Я пытаюсь добавить нового пользователя (используя форму регистрации) путем расширения модели пользователя с помощью ссылки «один на один». В форме регистрации я использую 2 формы, userSignup и userSignup_profile.
userSignup содержит сведения о пользователе для полей, которые уже находятся в 'auth_user'
userSignup_profile содержит другую информацию, такую как адрес, пин-код, et c.
Пожалуйста, обратитесь по ссылке, которая объясняет, что я пытаюсь сделать: https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html#onetoone
Models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
phone = models.CharField(max_length=10)
address = models.TextField(max_length=200)
pincode = models.IntegerField(default=0)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
Forms.py
class userSignup(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name','username', 'password', 'email')
class userSignup_profile(forms.ModelForm):
class Meta:
model = Profile
fields = ('phone', 'address', 'pincode')
user_signup. html
<body>
<form action="user_signup" method="POST">
{% csrf_token %}
{{form.as_p}}
{{ profile_form.as_p}}
<input id="next" type="hidden" name="next" value=" {{ request.GET.next }} "/>
<button class="primary" type="submit" value="login">SIGNUP </button>
</form>
</body>
просмотров .py
def user_signup(request):
if request.method == "POST":
user_form = userSignup(request.POST, instance=request.user)
profile_form = userSignup_profile(request.POST, instance=request.user.profile)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
return redirect('/')
else:
return redirect('user_signup')
else:
form = userSignup()
profile_form = userSignup_profile()
return render(request,"user_signup.html",{'form':form, 'profile_form':profile_form})
Ошибка:
Request Method: POST
Request URL: http://127.0.0.1:8000/user_signup
Django Version: 3.0.5
Python Version: 3.7.2
Installed Applications:
['shoppingCart.apps.ShoppingcartConfig',
'userAccess.apps.UseraccessConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Users\lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\ADI COLLEGE DOCUMENTS\Projects\djangoProject\userAccess\views.py", line 36, in user_signup
user_form = userSignup(request.POST, instance=request.user)
File "C:\Users\lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\forms\models.py", line 293, in __init__
object_data = model_to_dict(instance, opts.fields, opts.exclude)
File "C:\Users\lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\forms\models.py", line 84, in model_to_dict
opts = instance._meta
File "C:\Users\lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\utils\functional.py", line 225, in inner
return func(self._wrapped, *args)
Exception Type: AttributeError at /user_signup
Exception Value: 'AnonymousUser' object has no attribute '_meta'
Ошибка возникает при попытке отправить форму регистрации
Если я пытаюсь зарегистрироваться, когда я вошел в систему как другой пользователь, Модель пользователя обновляется, но Без изменений в Модель профиля
Как можно Убрать эту ошибку?