有自定义管理器但保持对象关键字可用
Have custom manager but keep objects keyword available
我正在学习Python + Django(基本上是恋爱-之前100%.NET guy),我正在尝试学习管理器的概念。
我正在尝试添加一个名为 ProviderManager
的自定义管理器,它将根据某些输入获取一些对象。
但是,我仍然希望能够说出这样的话:
city= City.objects.filter(id = city_id).first()
在我的 views.py
文件中。
我知道当我添加一个新的自定义管理器时,它会覆盖对象关键字。
但是,我的问题是:我如何既有可用的对象,又有我的新提供者方法,所以我可以说 City.provider.get_provider()
?
当前代码:
class ProviderManager(models.Manager):
def get_provider(country, city=0):
return "abekat"
class City(models.Model):
title = models.CharField(max_length=200)
country = models.ForeignKey(Country, null=True)
is_visible = models.BooleanField(default=False)
providers = ProviderManager()
def __str__(self):
return self.title
Views.py:
def city(request, country_id, city_id):
country= Country.objects.filter(id = country_id).first()
city= City.objects.filter(id = city_id).first()
print city
data = {
'country': country.title,
'city': city.title,
'provider': 'abe',
}
return render(request, 'city.html', data)
管理器为 table 范围内的操作提供方法(指的是它们所添加到的模型的 table)。
因此,如果您想为您的城市模型编写一个管理器,最好将其称为 CityManager。
由于自定义管理器继承自 models.Manager,您可以覆盖模型中的对象名称 class。这不会改变标准对象管理器的行为,但您的自定义方法也将在对象名称下可用。
有关详细信息,请参阅文档:
https://docs.djangoproject.com/en/1.8/topics/db/managers/#custom-managers
请注意管理器和模型方法之间的区别,后者用于 "row-level" 功能,如文档中所述。
我正在学习Python + Django(基本上是恋爱-之前100%.NET guy),我正在尝试学习管理器的概念。
我正在尝试添加一个名为 ProviderManager
的自定义管理器,它将根据某些输入获取一些对象。
但是,我仍然希望能够说出这样的话:
city= City.objects.filter(id = city_id).first()
在我的 views.py
文件中。
我知道当我添加一个新的自定义管理器时,它会覆盖对象关键字。
但是,我的问题是:我如何既有可用的对象,又有我的新提供者方法,所以我可以说 City.provider.get_provider()
?
当前代码:
class ProviderManager(models.Manager):
def get_provider(country, city=0):
return "abekat"
class City(models.Model):
title = models.CharField(max_length=200)
country = models.ForeignKey(Country, null=True)
is_visible = models.BooleanField(default=False)
providers = ProviderManager()
def __str__(self):
return self.title
Views.py:
def city(request, country_id, city_id):
country= Country.objects.filter(id = country_id).first()
city= City.objects.filter(id = city_id).first()
print city
data = {
'country': country.title,
'city': city.title,
'provider': 'abe',
}
return render(request, 'city.html', data)
管理器为 table 范围内的操作提供方法(指的是它们所添加到的模型的 table)。 因此,如果您想为您的城市模型编写一个管理器,最好将其称为 CityManager。
由于自定义管理器继承自 models.Manager,您可以覆盖模型中的对象名称 class。这不会改变标准对象管理器的行为,但您的自定义方法也将在对象名称下可用。
有关详细信息,请参阅文档: https://docs.djangoproject.com/en/1.8/topics/db/managers/#custom-managers
请注意管理器和模型方法之间的区别,后者用于 "row-level" 功能,如文档中所述。