2016-04-15 6 views
1

ЦЕЛЬ: Я создаю простое приложение для блога. В моих сообщениях есть один вид, называемый post_create, который должен сначала открыть форму, если нет почтового запроса. По форме отправьте запрос на отправку в тот же самый вид, и условное выражение затем проверяет, является ли форма действительной или нет. Если данные формы действительны, перенаправление отправляется на сообщение с сообщением об успешном завершении. Если перенаправление недействительно, запрос отправляется обратно в представление origianl post_create с сообщением об ошибке.остановка сообщений django из сообщения об ошибке и сообщения об успешном завершении сразу

ВОПРОС: Когда я впервые тестирую форму, отправив отсутствующие данные, я получаю обратную ссылку на исходную страницу формы и сообщение об ошибке, что хорошо. Но затем я заполняю форму со всеми правильными данными, и я перенаправляюсь на сообщение. Я вижу сообщение об ошибке и сообщение об успешном завершении одновременно. Я должен просто увидеть сообщение об успехе.

VIEW КОД:

def post_create(request): 
form = PostForm(request.POST or None) 
if form.is_valid() and request.method == 'POST': 
    instance = form.save(commit=False) 
    instance.save() 
    # message success 
    ## TODO GET MESSAGES TO NOT DISPLAY SUCCESS AND FAILURE 
    messages.add_message(request,messages.SUCCESS, "Logged in Successfully") 
    return HttpResponseRedirect(instance.get_absolute_url()) 
elif(request.method == 'POST'): 
    messages.error(request, "Not Successfully Created") 


context = { 
    "form":form, 
} 
return render(request,"post_form.html",context) 

ШАБЛОН сэкономленного сообщения:

<!-- DOCTYPE html --> 

<html> 
    <body> 
     {% if messages %} 
     <ul class="messages"> 

      {% for message in messages %} 
      <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li> 
      {% endfor %} 
     </ul> 
    {% endif %} 

     <h1>{{ post.title}}</h1> 
     <div> 
      {{post.content}}</br> 
      {{post.timestamp}}</br> 
      {{post.id}}</br> 
     </div> 
    </body> 
</html> 

ответ

0

форма является недействительным по умолчанию. Таким образом, ваше условие «elif» не будет работать здесь, сообщение об ошибке будет отображаться каждый раз при отправке формы. Но если форма успешно отправлена, ошибок не будет, следовательно, проверка действительно будет form.errors.

FIX:
изменения

elif(request.method == 'POST'): 

в

elif form.errors: 

Теперь вспышка сообщение должно отображаться при правильных условиях

Смежные вопросы