【发布时间】:2022-11-13 23:01:55
【问题描述】:
我有以下模型:
class Announcement(models.Model):
...
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
views = models.PositiveIntegerField(default=0, editable=False)
我的观点:
class AnnouncementDetailView(DetailView):
model = Announcement
context_object_name = 'announcement'
template_name = 'web/index.html'
def get(self, *args, **kwargs):
announcement = get_object_or_404(Announcement, id=kwargs['id'])
announcement.views += 1
announcement.save()
return super().get(self, *args, **kwargs)
问题是:
- 我知道F表达式,我将在下面使用它,但我想知道另一种更新字段而不是更新更新时间场地。
- 我想保存模型
views字段的更改,但每次保存时,它都会将新值设置为updated_at字段。这意味着每次我刷新页面时,它都会显示当前时间更新时间场,这是非常糟糕的。我已将视图的代码更改为:
... def get(self, *args, **kwargs): Announcement.objects.filter(id=kwargs['id']).update(views=F('views') + 1) return super().get(self, *args, **kwargs)现在它工作正常,但我有几个问题。它如何保存
views字段的新值而不调用节省""""Django""""" 的方法?我能用它走多远。改变模型的某些领域而不击中的最佳实践是什么节省方法?在此先感谢您的广泛解释!
【问题讨论】:
标签: python django database django-models