如何从视图中递增django整数字段?

如何从视图中递增django整数字段?,django,python-2.7,django-forms,django-views,django-database,Django,Python 2.7,Django Forms,Django Views,Django Database,我正在创建一个Django 1.8.4 web应用程序,以提交带有向上投票和向下投票功能的链接。但每次我点击“向上投票”按钮,它都会应用于提交的最后一个链接。我用表格来做。这种形式很正常: class VoteForm(forms.ModelForm): class Meta: model = Vote exclude = ("vote_type", "vote_date",) 模型如下: class Link(models.Model): ti

我正在创建一个Django 1.8.4 web应用程序,以提交带有向上投票和向下投票功能的链接。但每次我点击“向上投票”按钮,它都会应用于提交的最后一个链接。我用表格来做。这种形式很正常:

class VoteForm(forms.ModelForm):
    class Meta:
        model = Vote
        exclude = ("vote_type", "vote_date",)
模型如下:

class Link(models.Model):
    title       = models.CharField(max_length=200)
    ...
    up_votes    = models.IntegerField(default=0, blank=True, db_index=True)
    down_votes  = models.IntegerField(default=0, blank=True, db_index=True)
    ...

class Vote(models.Model):
    UP, DOWN = range(2)
    TYPE_CHOICES = [(UP, "Upvote"), (DOWN, "DownVote")]

    voter = models.ForeignKey(User)
    link = models.ForeignKey(Link, related_name='votes')
    vote_type = models.IntegerField(choices=TYPE_CHOICES, db_index=True, null=True)
    vote_date = models.DateTimeField(db_index=True, auto_now=True)
视图处理投票:(我想它还是那么简单和愚蠢)


这里的想法是检查当前用户是否为链接投票,如果她没有,则增加相应链接对象的up_votes字段。但现在它只增加最后一个link.object.up\u投票

正如您在评论中看到的,问题是由发送到视图的错误pk引起的,而关闭模板中的标记是我的错误。为了记录,我将模板代码的这部分粘贴到这里:

{% for link in object_list %}
<form method="POST" action="{% url 'vote' %}" class="vote_form">
    <li> 
        {% csrf_token %}
        <input type="hidden" id="id_link" name="link" class="hidden_id" value="{{ link.pk }}"/>
        <input type="hidden" id="id_link" name="voter" class="hidden_id" value="{{ user.pk }}"/>
        <button>+</button>
        [{{ link.up_votes }}] 
        <a href="{{ link.url }}">
            <h3>{{ link.title }}</h3>
        </a> 
        <a href="{% url 'link_detail' pk=link.id slug=link.title|slugify %}">
            Comments
        </a>
        <p>
            Submitted by: <a href="{% url 'profile' slug=link.submitter%}"> {{ link.submitter }}</a>
        </p>
    </li>
    </form>
{% endfor %}
{%用于对象列表%中的链接]
  • {%csrf_令牌%} + [{{link.up_voces}}] 提交人:

  • {%endfor%}
    正如您在评论中看到的,问题是由发送到视图的错误pk引起的,而关闭模板中的标记是我的错误。为了记录,我将模板代码的这部分粘贴到这里:

    {% for link in object_list %}
    <form method="POST" action="{% url 'vote' %}" class="vote_form">
        <li> 
            {% csrf_token %}
            <input type="hidden" id="id_link" name="link" class="hidden_id" value="{{ link.pk }}"/>
            <input type="hidden" id="id_link" name="voter" class="hidden_id" value="{{ user.pk }}"/>
            <button>+</button>
            [{{ link.up_votes }}] 
            <a href="{{ link.url }}">
                <h3>{{ link.title }}</h3>
            </a> 
            <a href="{% url 'link_detail' pk=link.id slug=link.title|slugify %}">
                Comments
            </a>
            <p>
                Submitted by: <a href="{% url 'profile' slug=link.submitter%}"> {{ link.submitter }}</a>
            </p>
        </li>
        </form>
    {% endfor %}
    
    {%用于对象列表%中的链接]
    
  • {%csrf_令牌%} + [{{link.up_voces}}] 提交人:

  • {%endfor%}
    form.data[“link”]的主键是否正确?您似乎没有做任何事情将表单绑定到特定链接。这正是问题所在。我添加了
    print link
    ,无论我点击哪个向上投票按钮,它都会打印相同的link.title。我现在能修好吗?我的意思是,我如何才能将正确的pk发送到视图?这真是一个愚蠢的问题!我忘记关闭模板中的标签了!因此无法发送正确的pk!谢谢大家。表单.data[“link”]带有正确的pk?您似乎没有做任何事情将表单绑定到特定链接。这就是问题所在。我添加了
    print link
    ,无论我点击哪个向上投票按钮,它都会打印相同的link.title。我现在能修好吗?我的意思是,我如何才能将正确的pk发送到视图?这真是一个愚蠢的问题!我忘记关闭模板中的标签了!因此无法发送正确的pk!谢谢各位。