2016-11-06 8 views
1

У меня возникла проблема с добавлением нового пользовательского пользователя в базу данных. Я знаю, что в Интернете есть некоторые темы об этом, но я не мог найти решение проблемы. После нажатия кнопки «Отправить» кнопку в регистрационной странице, какой шаблон здесь:PYTHON/DJANGO: «SUser.user» должен быть экземпляром «Пользователь»

{% extends 'strona/Main.html' %} 
{% block body %} 
< form action="" method="post" enctype="multipart/form-data" > 
    {% csrf_token %} 
    {% for field in form %} 
     {{ field.label_tag }} 
     </br> 
     {{ field }} 
     </br> 
     </br> 
    {% endfor %} 
    < button type="submit" class="btn btn-success">Submit</button > 
</form> 
{% endblock %} 

он продолжает говорить, что: «Невозможно назначить» < SimpleLazyObject: < django.contrib.auth.models.AnonymousUser объект в 0x038B5A70 >>» : «SUser.user» должен быть экземпляром «Пользователь» ».

Источник коды:

VIEWS.PY

class RegPanelView(View): 
panel = RegPanel 
template_name = 'strona/RegistrationTemp.html' 
registration = None 

def get(self, request): 
    form = self.panel(None) 
    return render(request, self.template_name, {'form': form}) 

def post(self, request): 
    # form = self.panel(data=request.POST) 
    form = self.panel(request.POST) 

    if form.is_valid(): 
     # user = form.save(commit=False) 

     # username = form.cleaned_data['username'] 
     password1 = form.cleaned_data['password1'] 
     password2 = form.cleaned_data['password2'] 

     if password1 == password2: 

      newuser = form.save(commit=False) 
      newuser.user = request.user 
      newuser.save() 

      return redirect('strona:index') 
    return render(request, self.template_name, {'form': form}) 

models.py

class SUser(models.Model): 
# User = user_model() 
user = models.OneToOneField(User, on_delete=models.CASCADE) 
username = models.CharField(max_length=200) 
# last_login = models.DateTimeField(blank=True) 
# is_active = models.BooleanField(default=True) 
is_staff = models.BooleanField(default=False) 
first_name = models.CharField(max_length=200) 
last_name = models.CharField(max_length=200) 
relations = models.ManyToManyField('self') 
# is_anonymous = False 
# is_authenticated = True 

USERNAME_FIELD = 'username' 
REQUIRED_FIELDS = ('',) 

FORMS.PY

class RegPanel(UserCreationForm): 

# password = forms.CharField(max_length=16, widget=forms.PasswordInput) 
# first_name = forms.CharField(max_length=100, required=False) 
# last_name = forms.CharField(max_length=100, required=False) 
# is_staff = forms.BooleanField(required=False) 

# birthday = forms.DateField(required=False) 

class Meta: 
    model = SUser 
    fields = ['username', 'is_staff', 'first_name', 'last_name'] 





def save(self, commit=True): 
    user = super(UserCreationForm, self).save(commit=False) 
    # user.set_password(self.cleaned_data["passwosrd1"]) 
    if commit: 



     user.set_password(self.cleaned_data["password1"]) 
     user.save() 
     # if commit: 
     # user.save() 

    return user 

SETTINGS.PY:

AUTH_USER_MODEL = 'auth.User' 

EDIT

ПОЛНЫЙ ОШИБКА след вызовов TRACEBACK:

Файл «C: \ Users \ Dawid \ AppData \ Local \ P rograms \ Python \ Python35-32 \ lib \ site-packages \ django-1.10.3-py3.5.egg \ django \ core \ handlers \ exception.py " внутри 39. response = get_response (запрос)

Файл «C: \ Users \ Dawid \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ django-1.10.3-py3.5.egg \ django \ core \ handlers \ base. ру " в _get_response 187. ответ = self.process_exception_by_middleware (е, запрос)

Файл " C: \ Users \ Dawid \ AppData \ Local \ Programs \ Python \ Python35-32 \ Lib \ сайта-пакеты \ django-1.10.3-py3.5.egg \ django \ core \ handlers \ base.py " в _get_response 185. ответа = wrapped_callback (запрос, * callback_args, ** callback_kwargs)

Файл «C: \ Users \ Dawid \ AppData \ Local \ Programs \ Python \ Python35-32 \ Lib \ сайта-пакеты \ django- 1.10.3-py3.5.egg \ Джанго \ Views \ родовое \ base.py " в виде 68. возвратного self.dispatch (запрос, * арг ** kwargs)

Файл " C: \ Пользователи \ Dawid \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ django-1.10.3-py3.5.egg \ django \ views \ generic \ base.py " при отправке 88. возвратный обработчик (запрос, * args, ** kwargs)

Файл «C: \ Users \ Dawid \ PycharmProjects \ Zananie \ strona \ views.py» в сообщении 97.newuser.user = request.user

Файл «C: \ Users \ Dawid \ AppData \ Local \ Programs \ Python \ Python35-32 \ Lib \ сайта-пакеты \ Джанго-1.10.3-py3.5.egg \ Джанго \ дб \ модели \ поля \ related_descriptors.py» в наборе 211. self.field.remote_field.model._meta.object_name,

Тип исключения: ValueError в/индексе/регистрации/Exception Значения: Не удается присвоить «< SimpleLazyObject:>»: «SUser.user» должен быть экземпляром «Пользователь».

Пожалуйста, кто-нибудь может мне помочь? С наилучшими пожеланиями.

+0

Что вы пытаетесь сделать? Это регистрационная форма, поэтому пользователь еще не может войти в систему. Итак, почему вы пытаетесь сохранить текущего пользователя на новый пользовательский объект? –

+0

Так как я могу сохранить нового пользователя после «if password1 == password2:»? – LOLOLOLO

+0

Правильно? – LOLOLOLO

ответ

0

Django ленивые грузы request.user, так что это может быть User или AnonymousUser в зависимости от состояния аутентификации.

if request.user.is_authenticated(): #then request.user will be `User` instance 
    newuser = form.save(commit=False) 
    newuser.user = request.user 
    newuser.save() 
+0

Он возвращает False, поэтому мой пользователь не может быть сохранен – LOLOLOLO

+0

Это означает, что вам нужно сначала войти в систему. https://docs.djangoproject.com/en/1.10/topics/auth/ – itzMEonTV

Смежные вопросы