从View调用类方法

时间:2014-10-20 11:59:44

标签: python django django-models django-views

我对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:'Manager'对象没有属性'title_count'

如何在最近添加的view.py函数中调用models.py方法?

我想在视图中的多个视图/函数中使用recentadded()方法。

2 个答案:

答案 0 :(得分:1)

视图代码是正确的,但不是模型 - MovieManager应该从models.Manager继承,而不是从models.Model继承。未找到明确声明的Manager,元类用默认管理器覆盖Movie.objects

您可以通过在Python shell中检查Movie.objects(或通过阅读django.db.models.base.ModelBase的源代码)自行找到。

答案 1 :(得分:1)

返回电影标题。你可能会有这个model.py文件

如果模型文件

,请在最后执行
def __unicode__(self):
    return self.title
相关问题