Я очень рано нахожусь в своем путешествии по развитию Django/Python, большинство вещей, которые я смог быстро выяснить после нескольких часов/дней царапин на голове и проб/ошибок. У меня теперь есть часто задаваемый вопрос, что я не могу нормально работать:Форма и вид обновления пользователя Django
Как создать просмотр/форму обновления профиля пользователя?
Я взломал несколько решений от Stack Overflow и просто не могу понять, что я делаю неправильно до сих пор. Вот первоначальный вариант моей бедной попытки с помощью Django 1.9:
#forms.py
class profileForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'email']
#views.py
@login_required
def profile(request):
if request.method == 'POST':
form = profileForm(data=request.POST, instance=request.user)
update = form.save(commit=False)
update.user = request.user
update.save()
else:
form = profileForm(instance=request.user)
return render(request, 'profile.html', {'form': form})
#urls.py
urlpatterns = [
url(r'^dashboard/$', views.dashboard, name='dashboard'),
url(r'^dashboard/profile$', views.profile, name='profile'),
]
#profile.html
<form action="." method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Update Profile</button>
</form>
Так что текущее поведение моего обновления профильного пользователя не обновлять какие-либо из указанных полей в форме на POST, но страница не содержит груз на другой URL. Например, URL-адрес формы для обновления профиля: /dashboard/profile, который перенаправляет на /приборную панель на отправку формы. Если я вручную добавлю email/first_name/last_name в администраторе Django, он будет корректно отображаться в моей форме ... Я просто не могу заставить его сохранять обновленные данные.
У меня была версия вышеуказанного кода, которая также давала мне ошибки в имени пользователя, которые, как я полагаю, были близки к решению? В конце концов, я хотел бы использовать адрес электронной почты в качестве имени пользователя, но я хотел бы подумать об этом, если у меня есть ультрапростая форма обновления рабочего профиля.
Я заранее извиняюсь за глупый вопрос, у меня есть Googled around и попытки других решений, но я либо не могу получить одинаковые исходные ошибки, либо не может получить рабочую версию как подробно.
Спасибо всем и отлично провели день и ночь!
EDIT:
Я также попытался это решение How to update User object without creating new one?, который также имеет такое же поведение: не обновлять какие-либо из указанных полей в форме на POST, но страница не содержит нагрузку на другой URL. .. что меня смущает больше, может быть, проблема связана с моим urls.py?
Спасибо за объяснение Даниэль, высоко оценил - urls.py должно было быть первое место, которое я проверил со странным поведением подчинения. Ваш пример кажется отсутствующим двоеточием 'if form.is_valid():' Еще раз спасибо. – tract
Хорошее место, исправлено. –