在views.py中调用models.py中的方法而不创建实例

时间:2015-05-15 05:39:53

标签: python django django-models django-1.8

Django的新手来自.NET,带有架构问题。

models.py内,我有一个名为city的概念。可以启用/禁用这些城市。

在我的观看内容中,我想检索名为Cities的视图下的所有活动城市。我需要在很多地方检索所有活跃的城市,所以我想我会在我的models.py城市类get_in_country中创建一个方法,所以它看起来像这样:

class City(models.Model):
    title = models.CharField(max_length=200)
    alias = models.CharField(max_length=200)
    country = models.ForeignKey(Country, null=True)
    is_visible = models.BooleanField(default=False)

    def __str__(self):
        return self.title

    def get_in_country(self, country_id):
        #return best code ever seen

无论如何,我现在的问题是:我如何在views.py内使用它?

作为一个很棒的菜鸟,我当然试过这个:

def country(request, alias):
    cities_in_country = City.get_in_country(1) #whatever id

    data = {
            'cities_in_country': cities_in_country, 
        }

    return render(request, 'country.html', data)

现在,你不必成为爱因斯坦(哼哼,Jon Skeet?)才能意识到这会出错,因为我还没有成为City的一个例子而且会引起异常:

unbound method get_in_country() must be called with City instance as first argument (got int instance instead)

那么:你如何修改我的代码以使用我新的真棒子方法?

1 个答案:

答案 0 :(得分:1)

您需要将get_in_country定义为static function

添加装饰器

@staticmethod

在课堂辩护之前

@staticmethod 
    def get_in_country(self, country_id):
class City(models.Model):
    title = models.CharField(max_length=200)
    alias = models.CharField(max_length=200)
    country = models.ForeignKey(Country, null=True)
    is_visible = models.BooleanField(default=False)

    def __str__(self):
        return self.title

    @staticmethod # Changed here
    def get_in_country(self, country_id):