Форма 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 %}

Переведено следующим образом:

enter image description here

Я хотел избавиться от этих связанных с паролем вещей внизу, поэтому я изменил свою форму на:

<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'}. Хотя это поднимает другой вопрос, почему эти поля обязательны для отправки? Есть ли способ просто не требовать их и избавить себя от необходимости скрывать их?

Вернуться на верх