Джанго: форма не отображается

После того, как пользователь зарегистрируется, я использую сигналы для создания профиля пользователя, чтобы он мог заполнить дополнительные данные (например, страну или веб-сайт), которые не может предложить стандартная регистрационная форма. Проблема в том, что форма не отображает содержимое. Однако я могу легко заполнить ту же форму на сайте администратора, но я хочу позволить пользователям делать это самостоятельно.

В 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', )
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы получаете ошибку отступа при запуске кода? Если нет, не могли бы вы обновить свой вопрос, указав правильный отступ, чтобы специалисты 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.

Надеюсь, это поможет, удачи!

Извините за отступ. Вставил и не пересматривал. В любом случае, проверю разрешения, мне это не пришло в голову, так что ура за это.

Eddie_J 30.05.2019 21:44

@EgidijusJančaitis нет проблем, я добавил больше к своему ответу, вы проходили и экземпляр вашего пользователя против экземпляра вашей модели.

hpca01 31.05.2019 15:18

спасибо большое за совет, постараюсь применить и пересмотреть. Я убивал себя целую вечность, так ценю

Eddie_J 31.05.2019 18:41

Все хорошо, чувак, я слишком хорошо знаю, каково это. Если это работает для вас, пожалуйста, не забудьте отметить мой ответ. Спасибо!

hpca01 31.05.2019 18:44

Будет сделано, приятель. не волнуйтесь

Eddie_J 31.05.2019 18:50

Другие вопросы по теме