Django - 如何从用户输入增加整数字段? [英] Django - How to increment integer field from user input?
问题描述
我是Django的新手,但我正在建立一个网站,人们可以就某些有争议的话题发表言论。现在我只是为每次辩论手动添加了几个陈述,我希望用户能够在一个声明上投票。
I'm new to Django, but I'm building a website where people can make statements regarding certain debatable topics. Right now I've just manually added a few statements for each debate and I'd like the users to have the ability to "vote" on a statement.
这是代码我现在有:
来自models.py的代码
Code from models.py
class Debate(models.Model):
title = models.CharField(max_length=50)
description = models.CharField(max_length=100)
pub_date = models.DateTimeField('Date Published')
url_slug = models.SlugField(editable=False)
def __unicode__(self):
return self.title
class Statement(models.Model):
statement = models.CharField(max_length=200)
debate = models.ForeignKey(Debate)
votes = models.IntegerField(default=0)
user = models.ForeignKey(User)
def __unicode__(self):
return self.statement
.py
def debate_page(request, url_slug):
if request.method == 'POST':
for statement in statements:
statement.votes = statement.votes+1
debate = Debate.objects.get(url_slug=url_slug)
template = get_template('debate_page.html')
statements = Statement.objects.filter(debate=debate)
variables = Context ({
'debate_title': debate.title,
'debate_description': debate.description,
'statements': statements,
})
output = template.render(variables)
return HttpResponse(output)
模板代码
{% extends "base.html" %}
{% block title %}{{ debate_title }}{% endblock %}
{% block head %}{{ debate_title }}{% endblock %}
{% block description %}{{ debate_description }}{% endblock %}
{% block content %}
{% for statement in statements %}
<li>{{ statement }} - {{ statement.votes }}
<input type="checkbox" name="statement" value="{{ statement.id }}" /></li><br />
{% endfor %}
<input type="submit" value="Submit" />
{% endblock %}
所以我想要的是访客检查在他们同意的声明旁边的框,然后点击提交按钮。这样做会增加该语句的投票属性1.我只是无法弄清楚如何获取用户输入并对数据库进行更改。
So what I'd like is for a visitor to check a box next to the statement that they agree with and then click the submit button. Doing that would increase the votes attribute for the statement by 1. I just can't figure out how to get user input and make a change to the database.
谢谢!
推荐答案
kyiphyu的代码可以使用F进一步简化表达式:
kyiphyu's code can be further simplified using F expressions:
from django.db.models import F
Statement.objects.filter(id__in=statements).update(vote=F('vote') + 1)
这篇关于Django - 如何从用户输入增加整数字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!