首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当DetailView遇到时,更新模型字段。[姜戈]

当DetailView遇到时,更新模型字段。[姜戈]
EN

Stack Overflow用户
提问于 2018-04-30 00:17:04
回答 2查看 650关注 0票数 0

我有一个类似于DetailView的views.py

views.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

当来自IntegerField的请求转移到views.py时,如何更新模型字段,即views.py。假设IntegerField的名称是单击,当用户访问特定链接或被动访问数据库中的模型对象时,我如何将该对象的单击字段增加1。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-30 00:19:22

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
self.object.clicks = self.object.clicks + 1
self.object.save()

但是正如丹尼尔在评论中所说的那样,使用这段代码你可以面对种族条件。所以最好像这样使用F expressions

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db.models import F

def get_context_data(self, **kwargs):
    data = super(CustomView, self).get_context_data(**kwargs)
    self.object.clicks = F('clicks') + 1
    self.object.save()
    <...snipped...>
    return data
票数 2
EN

Stack Overflow用户

发布于 2019-05-20 19:23:52

“永不漫游”非常接近,但是保存后需要从数据库中刷新对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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__

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50096510

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文