Django搜索计数器

时间:2011-08-24 22:48:48

标签: django search

您好我有一个应用程序,如果查询已经被搜索,则通过更新计数器来检查和计算搜索的术语,如果查询是新的,则插入具有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新手,我希望看到同样的“最佳实践”实现。任何答案都赞赏。

1 个答案:

答案 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()

您不需要在构造函数中设置所有值 - 只要它们在您保存或验证时都在那里。