Django OneToManyField ProfileUpdate интеграция с регистрацией пользователей

У меня проблемы с интеграцией информации из формы регистрации пользователя с другой формой, используемой в качестве средства обновления профиля Models.py

class Profile(models.Model):
skill_choices = (('Beginner', 'BEGINNER'),
                 ('Intermediate', 'INTERMEDIATE'),
                 ('Expert', 'EXPERT'))

user = models.OneToOneField(User, on_delete=models.CASCADE)
location = models.CharField(max_length=30, blank=True)
assumed_technical_ski_level = models.CharField(max_length=30, choices=skill_choices)
years_of_experience = models.IntegerField(blank=True)
money_to_spend = models.IntegerField(blank=True)


@receiver(post_save, sender= user)
def create_user_profile(self, sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

@receiver(post_save, sender=user)
def save_user_profile(self, sender, instance, **kwargs):
    instance.profile.save()

Views.py

class ProfileUpdateView(LoginRequiredMixin, TemplateView):
profile_form = ProfileForm
template_name = 'aplicatie2/profile-update.html'

def post(self, request):
    post_data = request.POST or None

    profile_form = ProfileForm(post_data, instance = request.user.profile)
    if profile_form.is_valid():
        profile_form.save()
        return HttpResponseRedirect(reverse_lazy('aplicatie2:lista'))
    context = self.get_context_data(profile_form = profile_form)

    return self.render_to_response(context)

def get(self, request, *args, **kwargs):
    return self.post(request)

Forms.py

class ProfileForm(forms.ModelForm):
class Meta:
    model = Profile
    fields = ('location', 'assumed_technical_ski_level', 'years_of_experience',
              'money_to_spend')

Регистрация осуществляется с помощью стандартной библиотеки django UserCreationForm Я получаю эту ошибку :

RelatedObjectDoesNotExist в /companies/questions/
У пользователя нет профиля.

Кто-то знает решение этой проблемы?

Возможно, save_user_profile вызывается перед create_user_profile. Уберите сигнал save_user_profile, Profile.objects.create (также форма) уже сохраняет экземпляр Profile, поэтому нет необходимости вызывать save. Также измените отправителя сигнала (User, а не user):

сигналы

@receiver(post_save, sender=User)
def create_user_profile(self, sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
Вернуться на верх