gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:50 25 4
gpt4 key购买 nike

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

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

在我的 View 中,我想检索我的 View 下名为 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)

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

最佳答案

您需要将 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):

关于python - 在views.py中调用models.py的方法而不创建实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30252258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com