簡體   English   中英

為什么我的表單中的輸入沒有寫入 django 中的 sqlite3 數據庫

[英]why is input from my form not writting to the sqlite3 database in django

我想在通過表單添加一些輸入后更新我的列表,但我看不到我更新的列表。 我在列表中看到現有項目,但是當我添加新項目時,它不會出現在列表中。 我可以使用管理面板手動添加它並在列表中查看它(完全不同的路徑),但不能使用我創建的表單來獲取輸入和更新列表。 我能夠查詢我的數據庫並且表單中的輸入沒有被寫入數據庫,這就是它沒有顯示任何更改的原因。下面是我的代碼

模型.py

class BlogPost(models.Model):
    notes = models.CharField(max_length = 1000000000000000000000000000)
    date = models.DateTimeField(auto_now_add=True)
    done = models.BooleanField(default=False)

    def __str__(self):
        return self.notes

表格.py

from blog.models import BlogPost

class BlogForm(forms.ModelForm):
    class Meta:
        model = BlogPost
        fields = ['notes', 'done',]

視圖.py

from django.shortcuts import render,redirect
from django.http import HttpResponse,HttpResponseRedirect,HttpRequest
from blog.models import BlogPost
from blog.form import BlogForm


def home(request):
    context = {
            'welcome_text': 'Welcome to the home page. View some more stuff soon'
            }
    return render(request,'home.html', context)

def blogpost(request):
    if request.method == "POST":
        form = BlogForm(request.POST)
        if form.is_valid():
            if  form.save():
                message.success(request, "the task was added")


        return redirect('blogpost')
    else:

        all_blogs = BlogPost.objects.all

        return render(request, 'blog.html',{'the_blogs': all_blogs } )

博客.html

{%extends 'base.html' %}


{% block title%}
        <title> Blog  </title>
{% endblock title%}

{%block content %}
        <div class="container">
         <br>
         {%for message in messages%}
                {{message}}
         {% endfor %}
         <form method = 'POST'>
                {% csrf_token %}

                <div class="form-group">
                        <input type="text" class="form-control" name = 'blog'  placeholder = 'new blog' >
                </div>

                <button type="submit" class="btn btn-primary">Add Blog</button>
        </form>
        <br>
                <table class="table table-hover table-dark">

                        <thead>
                                <tr>
                                        <th scope="col">Blog </th>
                                        <th scope="col">Done</th>
                                        <th scope="col">Date</th>
                                        <th scope="col">Edit</th>
                                        <th scope="col">Delete</th>
                                </tr>
                        </thead>
                        <tbody>
                        {% for item in the_blogs %}
                                {% if item.done %}
                                        <tr class="table-success">
                                                <td >{{item.notes}}</td>
                                                <td >Not-Completed</td>
                                                <td>{{item.date}}</td>
                                                <td>edit</td>
                                                <td>delete</td>
                                        </tr>
                                {% endif %}

                        {% endfor %}
                        </tbody>
                </table>
        </div>
{%endblock content%}

如果您需要有關此的更多信息,這里是我的 GitHub 存儲庫的鏈接,其中包含更多代碼。 https://github.com/wfidelis/Django-App

您必須更正代碼縮進和 get 調用部分,將表單傳遞給上下文 object 並在模板上用雙花括號調用它,還要向模板添加一個操作屬性。

def blogpost(request):
    all_blogs = BlogPost.objects.all()
    if request.method == "POST":
        form = BlogForm(request.POST)
        if form.is_valid():
            if  form.save():
                message.success(request, "the task was added")
        return redirect('blogpost')
    else:
        form = BlogForm()
    return render(request, 'blog.html',{'form': form, 'the_blogs': all_blogs } )


<form method='POST' action="">{% csrf_token %}
 {{ form.as_p }}
 <button type="submit" class="btn btn-primary">Add Blog</button>
<form/>

當您添加博客時,不要重定向,嘗試使用新列表呈現頁面,就像您在此處所做的一樣:

  all_blogs = BlogPost.objects.all
  return render(request, 'blog.html',{'the_blogs': all_blogs } )

or try returning new object created as JSON format to the front-end (as a response of the POST request) and front-end will add it to the HTML with jQuery or JS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM