2014-10-20 71 views
0

我對Django很陌生,我來自ASP.Net背景。從視圖中調用類方法

我想在其中一個web應用程序中實現OOP概念。

我有一種保持電影排行榜

url.py模型

from movies import views 

url(r'^recent/$', views.recentlyadded) 

models.py

from django.db import models 

class MovieManager(models.Model): 
    def title_count(self, keyword): 
     return self.filter(title__icontains=keyword).count() 

class Movie(models.Model): 
    movieid = models.AutoField(primary_key=True) 
    title = models.CharField(max_length=250) 
    objects = MovieManager() 

我試圖返回基於電影標題關於使用自定義管理器的關鍵字MovieManager

views.py

from movies.models import Movie 

def recentlyadded(request): 
    r = Movie.objects.title_count('night') 
    return HttpResponse("test") 

這將引發錯誤AttributeError的:'經理' 對象有沒有屬性 'title_count'

如何調用models.py方法recentlyadded view.py功能?

我想在多個視圖/函數中使用recentadded()方法。

回答

1

該視圖代碼是正確的,但不是模型 - MovieManager應該從models.Manager繼承,而不是從models.Model繼承。沒有找到明確聲明的Manager,元類用默認管理器覆蓋Movie.objects

FWIW您可以通過在Python shell中檢查Movie.objects(或通過閱讀django.db.models.base.ModelBase的源代碼)找到自己的FWIW。

+0

我同意你的看法,我可以更仔細地閱讀,我肯定會從下一次謹慎。 – 2014-10-20 12:37:38

1

要返回電影標題。你可能會對這一個model.py文件

末做,如果模型文件

def __unicode__(self): 
    return self.title