您好我有一个应用程序,如果查询已经被搜索,则通过更新计数器来检查和计算搜索的术语,如果查询是新的,则插入具有counter = 1的字段。
搜索计数器型号:
class Search(models.Model):
term = models.CharField(unique=True, max_length=255)
counter = models.IntegerField()
last_search = models.DateTimeField()
以及包含此内容的视图:
# update search counter with term
try:
term = Search.objects.get(term=query)
except Search.DoesNotExist:
term = None
if term:
term.counter = F('counter') + 1
term.last_search = datetime.now()
else:
term = Search(
term=query,
counter=1,
last_search = datetime.now()
)
term.save()
我的问题是 - 这是一个很好的方法吗?是否有更简洁的方法来表达它?这对我来说似乎过于丑陋,作为一名Django新手,我希望看到同样的“最佳实践”实现。任何答案都赞赏。
答案 0 :(得分:0)
这是一个更简洁的版本(您可能需要在计数器字段上设置“default = 0”):
try:
term = Search.objects.get(term=query)
except Search.DoesNotExist:
term = Search(term=query)
term.counter += 1
term.last_search = datetime.now()
term.save()
您不需要在构造函数中设置所有值 - 只要它们在您保存或验证时都在那里。