Django. Две модели в одном классе представления UpdateView связанных через OneToOneField
Хочу расширить стандартную модель User путём создания связанной таблицы. Мне нужно добавить одно поле, и сделать страницу с формой редактирования стандартного поля email из User, и поля из связанной таблицы.
Связанная с User модель:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
show_in_records = models.BooleanField(default=1)
def __str__(self):
return self.user.username
Форма:
class UserProfileFormTest(forms.ModelForm):
show_in_records = forms.BooleanField(label='Show your records in the main table of records', widget=forms.CheckboxInput(attrs={'class': 'form-check-input', 'placeholder': ''}), required=False)
email = forms.EmailField(label='Email', widget=forms.EmailInput(attrs={'class': 'form-control', 'placeholder': ''}))
class Meta:
model = UserProfile
fields = ('email', 'show_in_records')
views.py
class UserProfileView(LoginRequiredMixin, UpdateView):
model = UserProfile
form_class = UserProfileFormTest
template_name = 'main/user_profile.html'
success_url = reverse_lazy('home')
def get_object(self, queryset=None):
user_id = self.request.user.pk
user_obj = UserProfile.objects.get(user=user_id)
return user_obj
urls.py
from main.views import *
urlpatterns = [
path('', Index.as_view(), name='home'),
path('user_profile/', UserProfileView.as_view(), name='user_profile'),
..
]
user_profile.html
{% extends 'main/base.html' %}
{% block content %}
<div class="d-flex justify-content-center">
<form method="post" class="border rounded-2 p-4 mw-100 register needs-validation" novalidate>
{% csrf_token %}
{% for f in form %}
{% if f.widget_type == 'checkbox' %}
<div class="form-check mb-3">
{{ f }}
<label for="{{ f.id_for_label }}" class="form-check-label">{{f.label}}</label>
<div class="invalid-feedback">{{ f.errors }}</div>
</div>
{% else %}
<div class="form-floating div-input mb-3">
{{ f }}
<label for="{{ f.id_for_label }}">{{f.label}}</label>
<div class="invalid-feedback">{{ f.errors }}</div>
</div>
{% endif %}
{% endfor %}
<div class="text-danger form-error">{{ form.non_field_errors }}</div>
<div class="d-flex justify-content-end align-items-center">
<button type="submit" class="btn btn-dark edit_profile1">Save</button>
</div>
</form>
</div>
{% endblock %}
Проблема такая: Чекбокс, который поле модели UserProfile, и выводится корректно, и сохраняется при отправке формы. А вот поле email из модели User выводится пустым, и не сохраняется если туда что то написать. Но при этом, происходит валидация поля email, если оставить пустым или написать что то не похожее на email будет ошибка валидации формы. Т.е. Django в принципе понимает, что я от него хочу, он корректно валидирует и поле email из User, и поле show_in_records из UserProfile. Но если show_in_records и выводиться корректно и обновляется, то email и не выводится и не обновляется. И самое печальное, что никаких ошибок ни при запуске, ни при отправке формы, не выводиться. И я прям не знаю что не так и куда копать, буду рад любым мыслям.