Невозможно назначить «<SimpleLazyObject: <Пользователь: JohnDoe12 >>»: «Profile.user» должен быть экземпляром «Пользователь» - PullRequest
0 голосов
/ 14 января 2019

У меня две модели

class User(auth.models.User,auth.models.PermissionsMixin):

    def __str__(self):
        return "@{}".format(self.username)

class Profile(models.Model):
    user = models.OneToOneField(User,default=None, 
                   null=True,on_delete=models.CASCADE,)
    name = models.CharField(max_length=128) #actual creator's name

В форм.пи

class ProfileForm(forms.ModelForm):

    class Meta:
        exclude = ['user']
        # fields = '__all__'
        model = models.Profile

В views.py

def TestPage(request):

    form = ProfileForm

    if request.method == "POST":
        form = ProfileForm(request.POST)

        if form.is_valid():
            form_instance=form.save(commit=False)
            form_instance.user = request.user
            form_instance.save()
            return render(request,'test.html')
        else:
            print('ERROR FORM INVALID')

    return render(request,'accounts/update_profile.html',{'form':form})

Я думаю, что есть проблема со строкой form_instance.user = request.user. Я получаю сообщение об ошибке. Не удается назначить «>»: «Profile.user» должен быть экземпляром «User». В Profile.user я хочу сохранить текущего пользователя. Может ли кто-нибудь помочь мне с этим? Благодаря.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Может быть, вы можете попробовать так:

form_instance.user = User.objects.get(pk=request.user.pk)

Но также убедитесь, что пользователь вошел в систему перед переходом на эту строку (например, используя @ login_required или LoginRequiredMixin ).

0 голосов
/ 14 января 2019

Попробуйте это

form_instance.user = request.user.pk

Если не работает, то добавьте ваш models.py

...