嘿,我正在尝试建立一个基本的拍卖站点来学习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 %}
答案 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上触发创建。