Изо всех сил пытается использовать две формы с одним и тем же функциональным представлением, связывая его с определенными профилями - PullRequest
0 голосов
/ 27 января 2019

Во-первых, у меня есть модель с именем Account, которая связана с нативной моделью User в Django через одно-одно поле.Я создаю панель администратора, цель которой состоит в том, чтобы иметь возможность редактировать информацию о зарегистрированных учетных записях (пользователях) с помощью форм на странице своего внутреннего профиля.

Мне удалось создать представление с использованием двух форм (форма дляизменение модели пользователя и формы для изменения модели учетной записи), но поскольку экземпляр имеет значение request.user, я могу редактировать только свою собственную информацию в различных профилях.Я не уверен, как связать ПК для учетной записи в код.

Конечная цель, например: http://path/to/user/profile/1 - Возможность редактировать информацию учетной записи 1 http://path/to/user/profile/2 - Возможностьредактировать информацию учетной записи 2

Я пытался добавить pk в определение теста, но безуспешно.

urls.py

urlpatterns = [
       path("test/<int:pk>", views.test, name="test"),
] 

views.py

def test(request, pk):

    if request.method == 'POST':
        u_form = UserEditPersonalForm(request.POST, instance=request.user)
        a_form = AccountEditPersonalForm(request.POST, instance=request.user.account)

        if u_form.is_valid() and a_form.is_valid():
            u_form.save()
            a_form.save()
            messages.success(request, f'Account updated')
            return redirect('/cms/test/')
    else:
        u_form = UserEditPersonalForm(instance=request.user)
        a_form = AccountEditPersonalForm(instance=request.user.account)

    context = {
        'u_form': u_form,
        'a_form': a_form
    }

    return render(request, 'cms/test.html', context)

1 Ответ

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

Это не имеет ничего общего с "использованием двух форм в одном и том же функционально-ориентированном представлении".Пожалуйста, дайте вашему вопросу название, которое на самом деле относится к вашей проблеме, а именно: вы хотите редактировать данные данного пользователя, а не вошедшего в систему.

Решение состоит в том, чтобы просто получить соответствующего пользователя и передать его.вместо request.user и request.user.account в качестве параметра экземпляра для форм:

def test(request, pk):
    user = User.objects.get(pk=pk)
    if request.method == 'POST':
        u_form = UserEditPersonalForm(request.POST, instance=user)
        a_form = AccountEditPersonalForm(request.POST, instance=user.account)

        if u_form.is_valid() and a_form.is_valid():
            ...
    else:
        u_form = UserEditPersonalForm(instance=user)
        a_form = AccountEditPersonalForm(instance=user.account)
    ...
...