2011-08-24 56 views
0

嗨我有一個應用程序,通過更新計數器檢查和計數搜索條件,如果查詢已被搜索並插入一個字段與計數器= 1,如果查詢是新的。Django搜索計數器

搜索計數器模式:

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」的計數器字段):

try: 
    term = Search.objects.get(term=query) 
except Search.DoesNotExist: 
    term = Search(term=query) 

term.counter += 1 
term.last_search = datetime.now() 
term.save() 

你並不需要設置所有的值在構造 - 只要當你保存或驗證時,他們都在那裏。

+0

完美。我知道會有更好的方法來做到這一點。謝謝。 –