Каждый Пользователь в моем приложении Django имеет отношение 1 к 1 с объектом Profile . Я хочу сделать некоторые изящные элементы отображения хрустящих форм в моем ProfileUpdateForm. Когда я переопределяю init () в своем классе ProfileUpdateForm, страница разрывается с ошибкой атрибута.
Я изначально подозревал, что проблема заключается в том, что мои пользователи изменяют свой профиль в / u / update снет в строке URL. Поэтому, возможно, форма не получает существующий экземпляр Profile . В трассировке я вижу ожидаемый профиль, так что, возможно, это не проблема.
В моем представлении на основе классов я установил get_object () для возврата self.request.user.profile , так что любой пользователь, посещающий u / update, сможет обновлять только свой собственный профиль, а не другие. Это работает нормально, но как только я пытаюсь переопределить init () в моей форме на основе классов, форма обновления перестает работать.
Вот что у нас есть:
Форма
class ProfileUpdateForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('tagline', 'summary_text_public', 'summary_text_contacts')
Просмотр
class ProfileUpdate(LoginRequiredMixin, generic.UpdateView):
form_class = ProfileUpdateForm
template_name = 'profile/update.html'
success_url = reverse_lazy('profile:redirect_to_self')
def get_object(self):
return self.request.user.profile
Шаблон URL
path('update/', views.ProfileUpdate.as_view(), name='update'),
Приведенный выше код работает, как и ожидалось, пользователи могут обновлять свои профили в u / update. Когда я добавляю минимальный код init () (ниже) в ProfileUpdateForm, он прерывается.
Новая (ломающаяся) форма
class ProfileUpdateForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ProfileUpdateForm, self).__init__(*args, *kwargs)
class Meta:
model = Profile
fields = ('tagline', 'summary_text_public', 'summary_text_contacts')
Переопределение init (), как показано выше, приводит к ошибке AttributeError: у объекта 'str' нет атрибута 'get'
Дополнительная информация:
Error during template rendering
In template /home/<user>/.local/share/virtualenvs/<application env>/lib/python3.6/site-packages/crispy_forms/templates/bootstrap4/errors.html, error at line 1
'str' object has no attribute 'get'
1 {% if form.non_field_errors %}
2 <div class="alert alert-block alert-danger">
3 {% if form_error_title %}<h4 class="alert-heading">{{ form_error_title }}</h4>{% endif %}
4 <ul>
5 {{ form.non_field_errors|unordered_list }}
6 </ul>
7 </div>
8 {% endif %}
Я не уверен, почему это происходит. Если я не переопределю init (), все будет работать как положено. Я не уверен, почему это вызывает «неполевую ошибку» в хрустящих шаблонах. Я пробовал немало разных обходных путей и не могу найти четкого пути вперед.
Есть идеи, что может происходить за кулисами? Спасибо, что прочитали это далеко.