Я пытаюсь создать пользовательскую форму для своих пользователей, чтобы они могли редактировать свой профиль.ModelForm с Instance = Session ID
Так что, когда они войти в систему, я сохранить идентификатор пользователя в сессии, и попытаться отобразить пользовательскую форму (сделанный из 3-х классов) с пользовательскими данными внутри, но это не работает ...
forms.py:
class EditUser(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name']
class EditUserProfilePublic(forms.ModelForm):
class Meta:
model = UserProfilePublic
fields = ['website', 'facebook', 'twitter', 'google', 'books_frequency', 'favorite_types_of_books', 'hobbies', 'quote']
class EditUserProfilePrivate(forms.ModelForm):
class Meta:
model = UserProfilePrivate
fields = ['address', 'address_bis', 'zipcode', 'city']
views.py:
@login_required
def edit_user(request):
if request.method == 'POST':
pass
else:
member = User.objects.get(pk=request.session['user_id'])
formUser = EditUser(instance=member)
formPublic = EditUserProfilePublic(instance=member)
formPrivate = EditUserProfilePrivate(instance=member)
return render(request, 'membres/edit_user.html', locals())
template.html
<div class="large-6 medium-6 small-12 columns">
<div class="row collapse prefix-radius">
<label for="{{ formPublic.website.id_for_label }}">Site internet</label>
<div class="large-2 medium-2 small-2 columns">
<span class="prefix"><i class="fa fa-globe"></i></span>
</div>
<div class="large-10 medium-10 small-10 columns">
{{ formPublic.website }}
</div>
</div>
</div> (and so on)
models.py:
class UserProfile(models.Model):
user = models.OneToOneField(User)
slug = models.SlugField(max_length=30)
avatar = models.ImageField(null=True, blank=True, upload_to="avatars/")
def __str__(self):
return self.user
class UserProfilePublic(models.Model):
FREQUENCY_CHOICES = (
('', ''),
('1', 'Moins de 2 romans'),
('2', 'Entre 2 et 5 romans'),
('3', 'Entre 6 et 10 romans'),
('4', 'Plus de 2 romans')
)
user = models.OneToOneField(User)
website = models.URLField(blank=True)
facebook = models.URLField(blank=True)
twitter = models.URLField(blank=True)
google = models.URLField(blank=True)
hobbies = models.CharField(max_length=250, blank=True)
books_frequency = models.CharField(max_length=1, choices=FREQUENCY_CHOICES, default='')
favorite_types_of_books = models.TextField(blank=True)
favorite_books = models.TextField(blank=True)
quote = models.CharField(max_length=250, blank=True)
def __str__(self):
return self.user
class UserProfilePrivate(models.Model):
user = models.OneToOneField(User)
address = models.CharField(max_length=250, blank=True)
address_bis = models.CharField(max_length=250, blank=True)
zipcode = models.CharField(max_length=5, blank=True)
city = models.CharField(max_length=30, blank=True)
def __str__(self):
return self.user
Моя форма остается пустым без ошибок отображается ... Кстати, я мог использовать инструмент администратора, чтобы сделать такую вещь?
Привет, спасибо за помощь. Где я могу найти все переменные, хранящиеся во время входа? Я попробовал ваше решение, и оно работает для formUser, но не для другого. У меня есть отношения «один к одному» между пользователем и каждым классом «Профиль», но ничего в классе «Пользователь». На самом деле, я не переопределял/не расширил класс User, я создал новые классы с индивидуальным (подумал, что это лучшие практики) –
Я не знаю, что вы имеете в виду «переменные, хранящиеся во время входа» - вам это не нужно, вам просто нужно 'request.user', как я показал. Что именно происходит для других форм? Вы получили сообщение об ошибке? Вам может потребоваться показать определения классов профилей. –
Я редактировал свое первое сообщение, чтобы добавить классы. Ошибка, которую я получаю, - «Пользователь не имеет userprofileprivate». –