Форма Django не отправляется - PullRequest
       35

Форма Django не отправляется

0 голосов
/ 17 декабря 2018

Я пытаюсь сохранить форму модели, которая имеет следующие поля

class DiaryText(models.Model):
   DiaryUser=models.CharField(max_length=30,unique=False)
   DateCreated=models.DateTimeField(default=timezone.now)
   DiaryBody=models.TextField(max_length=10000)
   DiaryHeading=models.CharField(max_length=50,unique=False,null=True)

соответствующая форма модели: -

 class MakeADiaryForm(forms.ModelForm):
     class Meta:
        model=DiaryText
        fields={'DiaryHeading','DiaryBody'}
        widgets={
            'DiaryHeading':forms.TextInput(attrs={'placeholder':'Enter Title','class':'Headline'}),
            'DiaryBody':forms.Textarea(attrs={'placeholder':'Start Writing','class':'BodyDiary'}),
        }

Функция соответствующего представления выглядит следующим образом: -

 def NewEntryView(request,slug):
    UserPresent=get_object_or_404(DiaryUser,Username=slug)
    if request.method=='POST':
        form=MakeADiaryForm(request.POST)
        if form.is_valid():
            BlogEntry=form.save(commit=False)
            BlogEntry.DiaryUser=slug
            BlogEntry.save()
            return redirect('Display',**{'slug':BlogEntry.DiaryUer})
    else:
        form=MakeADiaryForm()
        return render(request,'Mobile/AddNewEntry.html',{'form':form,'slug':slug})

Но форма не сохраняет введенное значение и продолжает перенаправлять на ту же страницу.Здесь отображается имя другого представления, а slug - имя пользователя.Могу ли я также использовать лучшее ключевое слово вместо слизня, как имя пользователя.если да, пожалуйста, укажите как

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Прежде всего, return расположен не в том месте (может быть, просто шаблон кода SO сделал это), и вы должны определить instance в форме, иначе он создаст новый.Конечно, это была ваша проблема.:

def NewEntryView(request,slug):
    UserPresent=get_object_or_404(DiaryUser,Username=slug)
    if request.method=='POST':
        form=MakeADiaryForm(request.POST, instance=UserPresent) # You have to define the instance you want to edit othervise it tries to create a new one. Most probobly this was your issue
        if form.is_valid():
            BlogEntry=form.save(commit=False)
            BlogEntry.DiaryUser=slug
            BlogEntry.save()
            return redirect('Display',**{'slug':BlogEntry.DiaryUer})
    else:
        form=MakeADiaryForm()

    return render(request,'Mobile/AddNewEntry.html',{'form':form,'slug':slug}) # here

Убедитесь, что имя вашего метода POST в форме, и вы не используете действие , так как вы перенаправляете формы с помощью urls.py.И еще одна причина может заключаться в том, что форма не проходит фильтр is_valid ().Убедитесь, что вы вставляете действительные данные.

Совет: в шаблоне используйте {{ form.as_p }}, если он успешно загружен, это означает, что ваша проблема связана с фильтром is_valid().Кроме того, вы можете найти print('valid') сразу после, если is_valid():, чтобы проверить его.

0 голосов
/ 17 декабря 2018

Это довольно часто встречается, когда вы новичок в формах Django.Вот некоторые вещи, которые разработчики могут часто делать, что может привести к этой проблеме:

(1) Не упоминая токен CSRF: Django использует токены CSRF как способ шифрования всей информацииВы предоставляете при отправке его на сервер.Если вы не определили его в своем HTML-шаблоне, в зависимости от того, как вы управляли отправкой, ваша страница может выдать ошибку или просто перезагрузить.

(2) Не объявляется метод формы: Это похоже на проблему в вашем случае.Разработчики, когда они новички в HTML, часто забывают объявить вызов метода HTTP, который они будут делать со своей формой.Обязательно объявите, что вы выполняете вызов метода POST внутри тега формы, и он должен работать.Вот пример:

<form method = "POST" action = "">

Дайте мне знать, если это решит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...