Форма django не отправляется при отображении определенных полей в шаблоне
У меня есть UpdateUserForm:
class UserUpdateForm(UserChangeForm):
email = forms.EmailField()
first_name = forms.CharField(max_length=100)
last_name = forms.CharField(max_length=100)
username = forms.CharField(max_length=100, widget=forms.TextInput())
last_login = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'type': 'hidden'}))
is_superuser = forms.CharField(max_length=100, widget=forms.CheckboxInput(attrs={'type': 'hidden'}))
is_staff = forms.CharField(max_length=100, widget=forms.CheckboxInput(attrs={'type': 'hidden'}))
is_active = forms.CharField(max_length=100, widget=forms.CheckboxInput(attrs={'type': 'hidden'}))
date_joined = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'type': 'hidden'}))
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'last_login', 'date_joined')
def update_user_notification(self):
email = self.cleaned_data['email']
username = self.cleaned_data['username']
if self.is_valid():
update_user_notification_task.delay(email, username)
Изначально я создал эту форму в шаблоне как {{form.as_p}}
и она работала, но были некоторые вещи, которые я хотел исправить:
<h1>Update Information...</h1>
<form method="POST">
{% csrf_token %}
{{form.as_p}}
<button>UPDATE</button>
</form>
<br></br>
<a href="{% url 'user_detail' user.pk %}">Back</a>
<a href="/">Home</a>
{% endblock %}
Переведено следующим образом:
Я хотел избавиться от этих связанных с паролем вещей внизу, поэтому я изменил свою форму на:
<form method="POST">
{% csrf_token %}
<p><label>{{form.email.label}}: </label>{{form.email}}</p>
<p><label>{{form.username.label}}: </label>{{form.username}}</p>
<p><label>{{form.first_name.label}}: </label>{{form.first_name}}</p>
<p><label>{{form.last_name.label}}: </label>{{form.last_name}}</p>
<button>UPDATE</button>
</form>
Это сработало на фронтенде, но теперь моя форма не отправляется. Когда я нажимаю обновить, страница выглядит так, как будто она загружается, но моя база данных не обновляется, и моя задача celery не выполняется. В чем проблема?
Нужно ли мне иметь все поля, чтобы отправить форму? Есть ли способ просто исключить поля, связанные с паролем? И является ли это лучшим вариантом?
Ответ на самом деле был очень прост. Я добавил {{form.errors}}
, чтобы проверить, происходят ли какие-либо ошибки в реальной форме, поскольку на моей сетевой вкладке ошибок не было.
Оказалось, что last_login
и date_joined
необходимы для размещения формы. Как только я добавил их:
<form method="POST">
{% csrf_token %}
<p><label>{{form.email.label}}: </label>{{form.email}}</p>
<p><label>{{form.username.label}}: </label>{{form.username}}</p>
<p><label>{{form.first_name.label}}: </label>{{form.first_name}}</p>
<p><label>{{form.last_name.label}}: </label>{{form.last_name}}</p>
<p>{{form.last_login}}</p>
<p>{{form.date_joined}}</p>
<button>UPDATE</button>
</form>
Форма смогла отправить и обновить базу данных. Я опустил метку, потому что эти формы для меня все равно attrs={'type': 'hidden'}
. Хотя это поднимает другой вопрос, почему эти поля обязательны для отправки? Есть ли способ просто не требовать их и избавить себя от необходимости скрывать их?