将数据写入Django SQL Lite DB时遇到麻烦

时间:2020-09-15 19:56:05

标签: python django database

嘿,我正在尝试建立一个基本的拍卖站点来学习Python,但是在使用Django(SQL Lite)将数据写入db时遇到了问题。我使用了“ python manage.py inspectdb”,发现该数据库已更新并在我要使用的所有5个字段中都建立良好。

我正在构建监视列表功能,当用户单击“添加到监视列表”时,应该将其添加到该用户的监视列表中-但是它没有添加任何数据-即使当我像现在这样对数据进行硬编码时

我包括了新的Post选项的代码,该选项是我编写的,即使它与“监视列表”功能非常相似,也可以正常工作。我只是不知道为什么它不起作用。

这是我的代码:

views.py:

def watchlist(request, username):
if request.method == "POST":
    new = Watchlist.objects.create(username = username, title = "Monkey", description = "Eats bananas", price = 300, category = "Animals")
    new.save()
    return render(request, "auctions/watchlist.html")
else:
    query = Watchlist.objects.all()
    return render(request, "auctions/watchlist.html", { "queries": query })

watchlist.html:

   % block body %}
    <h2>Watch List</h2>
<ul>

    {% for query in queries %}
            <li><a href="/watchlist/{{query.user}}">{{ query.title }} - {{ query.description }} - ${{ query.price }} - {{ query.category }}</a></li>
    {% endfor %}  
    {% endblock %}

3 个答案:

答案 0 :(得分:1)

您应从username文件中删除views.py参数

在您的html文件中,在表单标签中添加for循环

<form method="POST">
    {% csrf_token%}
    # your for loop
</form>

答案 1 :(得分:1)

这可能无法解决问题,但是您可能想做的一件事是将query = Watchlist.objects.all()行移至随后的“ else”块之外。当前,查询结果永远不会在POST调用后传递到模板。更像是:

def watchlist(request, username):
  if request.method == "POST":
    new = Watchlist.objects.create(username = username, title = "Monkey", description = "Eats bananas", price = 300, category = "Animals")
    new.save()

  query = Watchlist.objects.all()
  return render(request, "auctions/watchlist.html", { "queries": query })

答案 2 :(得分:1)

在Django视图中,您正在检查HTTP请求,但是HTML代码没有形式,只有超链接。超链接将执行get方法,而不是发布。 您可以将HTML更改为表单,也可以更改视图以在HTTP get上触发创建。