【发布时间】:2016-01-22 18:55:13
【问题描述】:
所以我有一个模型Listing(),它有一个字段views。在我的一个观点中,当有人查看列表页面时,views 字段通过listing.views = F('views') + 1 和listing.save(update_fields=['views']) 加一。我的问题是,当我使用{{ listing.views }} 从同一个模板访问views 属性时,模板不显示当前的视图数量,而是显示F(views) + Value(1)(字面意思是该文本)。现在,我假设我可以使用模型方法,例如 def get_views(),它会返回 self.views,但我想知道为什么我会遇到这个奇怪的问题。另外,有没有一种不用写模型方法就能得到实际整数而不是奇数F(views) + Value(1)的方法?
这是我当前的代码:
models.py
class Listing(models.Model):
...
views = models.IntegerField(default=0)
listings.py
class ListingView(View):
def get(self, request):
listing_id = request.GET['listing_id']
listing = get_object_or_404(Listing, id=listing_id)
listing.views = F('views') + 1
listing.save(update_fields=['views'])
return render(request, 'listings.html', {'listing': listing})
listings.html
<html>
{{ listing.views }}
</html>
【问题讨论】:
-
不确定
F objects的使用是否合适;有什么理由不使用listing.views += 1? -
显然从我所读的内容来看它更有效 - 但老实说我不是 100% 确定(尽管代码确实有效)。如果没有人可以提供可行的替代方案,我将默认返回您建议的代码。
-
你说得对!嗯。我一直使用它们进行查询内计算。无论如何,有一些文档可以帮助您回答下面的问题。
标签: python django postgresql model-view-controller orm