После того, как пользователь зарегистрируется, я использую сигналы для создания профиля пользователя, чтобы он мог заполнить дополнительные данные (например, страну или веб-сайт), которые не может предложить стандартная регистрационная форма. Проблема в том, что форма не отображает содержимое. Однако я могу легко заполнить ту же форму на сайте администратора, но я хочу позволить пользователям делать это самостоятельно.
В Chrome я попытался проверить проблему, и там, где есть форма, написано, что input='hidden'. В чем может быть проблема? Заранее спасибо.
мои взгляды:
def edit_profile(request):
if request.method == 'POST':
edit_form = EditProfileForm(request.POST,
instance=request.user.profile)
if edit_form.is_valid():
edit_form.save()
messages.success(request, 'Your account has been updated!')
return redirect(profile)
else:
edit_form = EditProfileForm(instance=request.user.profile)
context = {'edit_form': edit_form}
return render(request, 'profile.html', context)
мой профиль.html:
<form method='POST'>
{% csrf_token %}
{{ edit_form }}
<button type = "submit">Update</button>
</form>
модели:
class Profile(models.Model):
user = models.OneToOneField(User)
description = models.CharField(max_length=100, default='')
country = models.CharField(max_length=100, default='')
website = models.URLField(default='')
image = models.ImageField(default='images/profile.jpg',
upload_to='images')
def __str__(self):
return self.user.username
def create_profile(sender, **kwargs):
if kwargs['created']:
profile = Profile.objects.create(user=kwargs['instance'])
post_save.connect(create_profile, sender=User)
формы.py:
class EditProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('status', 'website', 'description', 'country', 'user', )
Вы получаете ошибку отступа при запуске кода? Если нет, не могли бы вы обновить свой вопрос, указав правильный отступ, чтобы специалисты SO могли помочь вам устранить неполадки.
Далее, есть ли у вас какие-либо групповые разрешения для стандартных пользователей по сравнению с нестандартными пользователями (администраторами)? Я бы проверил, есть ли у них возможность свободно изменять свои объекты User.
Ошибки для формы обычно отображаются <ul class = "errorlist">
FormsAPI, я бы проверил их. Если нет, то я бы дважды проверил, что возвращаемая форма на самом деле не пуста, отладив ее и просмотрев определение __dict__
этого объекта. Я не могу дать вам больше предложений, пока часть отступа не будет исправлена, поэтому я могу исключить любые логические ошибки.
Нашел проблему: edit_form = EditProfileForm(instance=request.user.profile)
Что вы хотите сделать, так это запросить объект Profile
, принадлежащий пользователю, жирный, а затем передать его как экземпляр вашему EditProfileForm
.
class EditProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('status', 'website', 'description', 'country', 'user', )
Мета вашей формы — это объект Profile
, а не объект User
.
Надеюсь, это поможет, удачи!
@EgidijusJančaitis нет проблем, я добавил больше к своему ответу, вы проходили и экземпляр вашего пользователя против экземпляра вашей модели.
спасибо большое за совет, постараюсь применить и пересмотреть. Я убивал себя целую вечность, так ценю
Все хорошо, чувак, я слишком хорошо знаю, каково это. Если это работает для вас, пожалуйста, не забудьте отметить мой ответ. Спасибо!
Будет сделано, приятель. не волнуйтесь
Извините за отступ. Вставил и не пересматривал. В любом случае, проверю разрешения, мне это не пришло в голову, так что ура за это.