Данные добавляются но не показываются в форме
Расширил модель user: данные добавляются, но не показываются в форме. Вот, где выделено, я через форму добавил данные, но они не выводятся как в first name last name email
models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver
from PIL import Image
from django.db.models.signals import post_save
class Sitylist(models.Model):
idsity = models.AutoField(primary_key=True)
sityname = models.TextField()
class Profile(models.Model):
BLOOD_TYPES_CHOICES = [('В активном поиске', 'В активном поиске'),('Встречаюсь', 'Встречаюсь'),('Женат', 'Женат'),('Замужем', 'Замужем'),('Всё сложно', 'Всё сложно'),]
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
#sity = models.TextField('sity', max_length=30,blank=False,choices=INTEGER_CHOICES)
birth_date = models.DateField(null=True, blank=True)
osebe = models.TextField(max_length=300, blank=True)
blood_type = models.CharField('Blood Type', max_length=20,blank=False,choices=BLOOD_TYPES_CHOICES)
def __str__(self):
return self.user.username
class Profilava(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True)
avatar = models.ImageField(default='default.jpg', upload_to='profile_images')
def __str__(self):
return self.user.username
def save(self, *args, **kwargs):
super().save()
img = Image.open(self.avatar.path)
if img.height > 100 or img.width > 100:
new_img = (100, 100)
img.thumbnail(new_img)
img.save(self.avatar.path)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profilava.objects.create(user=instance)
Profile.objects.create(user=instance)
forms.py
from django import forms
from django.contrib.auth.models import User
from board.models import Profilava, Profile
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email')
widgets = {
'first_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder':'Имя'}),
'last_name': forms.TextInput(attrs={'class': 'form-control'}),
'email': forms.TextInput(attrs={'class': 'form-control'}),
}
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('birth_date','blood_type','osebe')
widgets = {
'blood_type': forms.Select(attrs={'class': 'form-control'}),
'birth_date': forms.DateInput(attrs={'type': 'date', 'placeholder': 'yyyy-mm-dd (DOB)', 'class': 'form-control'}),
'osebe': forms.Textarea(attrs={'class': 'form-control','rows':'4','style':'resize:none'}),
}
class ProfilavaForm(forms.ModelForm):
class Meta:
model = Profilava
fields = ('avatar',)
widgets = {
'blood_type': forms.Select(attrs={'class': 'form-control form-control-sm'})
}
views.py
from django.shortcuts import render, HttpResponse, redirect
from django.db import transaction
from django.contrib import messages
from board.forms import UserForm, ProfilavaForm, ProfileForm
def mprofil(request):
if request.user.is_authenticated:
if request.method == 'POST':
profile_form = ProfilavaForm(request.POST, request.FILES, instance=request.user.profilava)
if profile_form.is_valid():
profile_form.save()
messages.success(request, ('Ваш профиль был успешно обновлен!'))
return render(request, 'board/mprofil.html')
else:
messages.error(request, ('Пожалуйста, исправьте ошибки.'))
else:
profile_form = ProfilavaForm(request.POST, request.FILES,instance=request.user.profilava)
return render(request, 'board/mprofil.html', {
'profilava_form': profile_form
})
return redirect('mprofil')
@transaction.atomic
def settings(request):
if request.user.is_authenticated:
if request.method == 'POST':
user_form = UserForm(request.POST, instance=request.user)
profiles_form = ProfilavaForm(request.POST, request.FILES, instance=request.user.profilava)
prof_form = ProfileForm(request.POST, instance=request.user.profile)
if user_form.is_valid and profiles_form.is_valid and prof_form.is_valid():
user_form.save()
profiles_form.save()
prof_form.save()
messages.success(request, ('Ваш профиль был успешно обновлен!'))
return redirect('settings')
else:
messages.error(request, ('Пожалуйста, исправьте ошибки.'))
else:
user_form = UserForm(instance=request.user)
profiles_form = ProfilavaForm(request.POST, request.FILES,instance=request.user.profilava)
prof_form = ProfileForm(request.POST, instance=request.user.profile)
return render(request, 'board/settings.html', {
'user_form': user_form,
'profilava_form': profiles_form,
'profile_form': prof_form,
})
else:
return redirect('login')
шаблон
{% extends "board/base.html" %}
{% load static %}
{% block content %}
<p></p>
<div>
{% if user.is_authenticated %}
<div class="container">
<form method='POST' action='{{ action_url }}' enctype='multipart/form-data'>
{% csrf_token %}
<div class="box-input">
{{ user_form.as_p }}
{{ profile_form.as_p }}
</div>
<button class="form-control" type="submit">Сохранить изменения</button>
</form>
</div>
{% endif %}
</div>
{% endblock %}
