Django - Как увеличить число целых чисел от ввода пользователем? - программирование

Django - Как увеличить число целых чисел от ввода пользователем?

Я новичок в Django, но я создаю сайт, на котором люди могут делать заявления по некоторым спорным темам. Сейчас я только что добавил несколько инструкций для каждой дискуссии, и я хотел бы, чтобы пользователи имели возможность "проголосовать" за выражение.

Вот код, который у меня есть сейчас:

Код из 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

Код из views.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. Я просто не могу понять, как получить вход пользователя и внести изменения в базу данных.

Спасибо!

4b9b3361

Ответ 1

Код kyiphyu может быть дополнительно упрощен с использованием выражений F:

from django.db.models import F

Statement.objects.filter(id__in=statements).update(vote=F('vote') + 1)

Ответ 2

Вы можете получить ввод пользователя с помощью

statements = request.POST.getlist('statement')

Из этого списка вы можете увеличить количество голосов и обновить базу данных, например

for st in statements:
    statement = Statement.objects.get(id=st)
    statement.vote += 1
    statement.save()

Надеюсь, это поможет вам.