【问题标题】:i want an upvote button that when clicked increment the value of a field(integer) in database我想要一个upvote按钮,单击该按钮时会增加数据库中字段(整数)的值
【发布时间】:2019-11-21 17:52:50
【问题描述】:

我的按钮 html 是

<td>
  <a href="{% url 'minor:upvote'  %}">
    <button type="button" class="likes" style="text-align:center;border-radius:40px;width: 100px;height: 40px">upvote</button>
  </a>
</td>

网址是..

path('',view=views.upv,name='upvote'),

视图是

def upv(request,id):
    reporter = Logg.objects.get(id=id)
    reporter.upvote = reporter.upvote+1
    reporter.save()
    return redirect('/')

但是 upvote 字段,即默认值为 0 的整数字段不会增加。

【问题讨论】:

  • 我认为它对 id 做了一些事情,
  • 在“reporter.upvote =reporter.upvote+1”这一行之后和之前打印upvote。检查这条线是否工作

标签: python html django web-applications django-templates


【解决方案1】:

您必须在 urlpatterns 定义中传递 id。由于您使用path,因此要将 id 添加到您的视图参数中,请使用此

path('<id>/', views.upv, name="upvote")

来自path 文档

路由参数应该是包含 URL 模式的字符串或 gettext_lazy()(请参阅翻译 URL 模式)。 字符串可能包含尖括号(如上)以捕获部分 URL 并将其作为关键字参数发送到视图。

https://docs.djangoproject.com/en/2.2/ref/urls/#path

然后在模板中你还需要包含 id

<td>
  <a href="{% url 'minor:upvote' id=logg.id  %}">
    <button type="button" class="likes" style="text-align:center;border-radius:40px;width: 100px;height: 40px">upvote</button>
  </a>
</td>

【讨论】:

  • 但是先生,html模板呢,它也必须编辑。
  • 感谢它现在正在工作,我也在模板中添加了 Logg.id。
  • 酷,很高兴能帮到你
【解决方案2】:

您没有将Logg ID 传递给视图,将数字参数添加到URL 并将ID 传递给url 模板标签:

网址路由:

path('(?P<id>\d+)',view=views.upv,name='upvote'),

模板:

{% url 'minor:upvote' my_current_logg.pk %}

【讨论】:

  • 酷,如果它解决了你的问题,请接受答案
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 2011-06-09
相关资源
最近更新 更多