遇到DetailView时更新模型字段。[江戈]

2024-06-10 18:40:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似于视图.py

视图.py

class CustomView(DetailView):
    context_object_name = 'content'
    model = models.AppModel
    template_name = 'dynamictemplate.html'

    def get_context_data(self, **kwargs):
        data = super(CustomView, self).get_context_data(**kwargs)
        <...snipped...>
        return data

当来自网址.py转移到视图.py。假设IntegerField的名称是clicks,当用户访问某个链接或从数据库中被动访问一个模型对象时,如何将该对象的clicks字段增加1。在


Tags: 对象namepyself视图datagetobject
2条回答

neverwaltoner非常接近,但对象在保存后需要从数据库中刷新。在

from django.db.models import F

def get_context_data(self, **kwargs):
    context = super(CustomView, self).get_context_data(**kwargs)
    self.object.clicks = F('clicks') + 1
    self.object.save()
    self.object.refresh_from_db()
    <...snipped...>
    return context

现在将显示单击的值,而不是F表达式的__repr__。在

您可以使用self.object并按如下方式更新:

self.object.clicks = self.object.clicks + 1
self.object.save()

但正如Daniel在评论中所说,使用此代码,您可以面对race condition。所以最好是这样使用^{}

^{pr2}$

相关问题 更多 >