пытаясь заставить фрейм сообщений работать для отображения сообщения, если оно допустимо и недействительно - PullRequest
0 голосов
/ 08 ноября 2019

По какой-то причине django отображает как сообщение об успехе, так и сообщение об ошибке, когда я пытаюсь отобразить сообщения при создании и обновлении формы. Здесь я копирую код, добавляя только создание формы.

Используемое представление:

#function based views
def post_create(request):
    form = PostForm(request.POST or None)
    # if request.method == "POST":
    #     # print(request.POST)
    #     print("title: ", request.POST.get("title"))
    #     print("content: ",request.POST.get("content"))
    if form.is_valid():
        instance=form.save(commit=False)
        print(form.cleaned_data.get("title"))
        instance.save()
        #a success message
        messages.success(request, "Successfully Created")
        return HttpResponseRedirect(instance.get_absolute_url())
    else:
        messages.error(request, "Post Not Created")

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

, а модель Post также очень проста:

class Post(models.Model):
    title = models.CharField(max_length=120)#;
    content = models.TextField()#:
    updated = models.DateTimeField(auto_now = True, auto_now_add=False)#; save and update everytime change is done
    timestamp = models.DateTimeField(auto_now = False, auto_now_add = True)#; auto_now_add = save and set one time


    def __unicode__(self):
        return self.title

    #python3
    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("posts:detail", kwargs={"id":self.id})

шаблон формы:

<html>
    <head><title>new page</title></head>
    <body>
        <h1>Form</h1>

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

            {{ form.as_p }}{% csrf_token %}
            <input type="submit" value="Create Post"/>

        </form>

    </body>
</html>   

и страница, на которой отображается сообщение:

<!DOCTYPE HTML>
<html>
    <head>
        <title>
            index.html
        </title>
    </head>
    <body>

        {% if messages %}

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

            <h1><b>TITLE: </b>{{ title }}</h1>
        <hr/>
            {{ instance.title }} <br/>
            {{ instance.content }}<br/>
            {{ instance.updated }}<br/>
            {{ instance.timestamp }}<br/>


        Template is working!!
    </body>
</html>

Теперь я не знаю почему, но по какой-то причине я создаю форму, и данные действительны:
enter image description here

Форма создается правильно, страница перенаправляется правильно, но отображаемые сообщения совершенно неверны. Я имею в виду, почему сообщения об успехе и неудаче отображаются одновременно:enter image description here

в чем здесь проблема и как мне ее решить?

1 Ответ

1 голос
/ 08 ноября 2019

попробуйте это.

def post_create(request):

    form = PostForm()
    if request.method =='POST':

        form = PostForm(request.POST)
        # if request.method == "POST":
        #     # print(request.POST)
        #     print("title: ", request.POST.get("title"))
        #     print("content: ",request.POST.get("content"))
        if form.is_valid():
            instance=form.save(commit=False)
            print(form.cleaned_data.get("title"))
            instance.save()
            #a success message
            messages.success(request, "Successfully Created")
            return HttpResponseRedirect(instance.get_absolute_url())
        else:

             messages.error(request, "Post Not Created")
             context= {
                        "form":form
                    }
            return render(request, "post_form.html",context) 

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