django - добавление профиля пользователя в форму регистрации.форма не представлена - PullRequest
0 голосов
/ 20 сентября 2019

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

после заполнения и отправки регистрационной формы детали формы не отправляются

models.py


class UserProfile(models.Model):
  user = models.OneToOneField(User, on_delete=models.CASCADE)

  Assigned_Group = models.CharField(max_length=500)

  def __str__(self):
      return self.user.username

views.py

def register(request):
    if request.method == 'POST':

        form = RegistrationForm(request.POST)
        profile_form = UserProfileForm(request.POST)

        if form.is_valid() and profile_form.is_valid():
            user = form.save()

            profile = profile_form.save(commit=False)
            profile.user = user

            profile.save()

            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)

            login(request, user)
            return redirect('index')
    else:
        form = RegistrationForm()
        profile_form = UserProfileForm()

    context = {'form': form, 'profile_form':profile_form}
    return render(request, 'registration/register.html', context )

def index(request):
        if request.user.is_authenticated:
                username = request.user.username
        else:
                username = 'not logged in'
        context = {'username':username}
        return render(request, 'index.html', context)

urls.py


    path('Register/', views.register, name='register'),

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

В вашей html-форме вам нужно будет вставить {% csrf_token %}.

См. Документы django на CSRF для получения дополнительной информации или если вы используете AJAX.

Например, ваш HTML будет выглядеть примерно так.

<form method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit">
</form>

Примечание от документов django (что важно).

В соответствующих функциях представления убедитесь, что RequestContext используется для визуализации ответа, чтобы {% csrf_token%} будет работать правильно.Если вы используете функцию render (), общие представления или приложения contrib, вы уже охвачены, поскольку все они используют RequestContext.

0 голосов
/ 20 сентября 2019

в вашей html-странице в теле вы должны вставить {% csrf_token%}, например:

    <html>
    <body>
    {% csrf_token %}
    </body>
...