Python 如何为django城市轻型乡村模式增加资本?
我正在Django 1.8.x中使用(较轻版本的)。它定义了国家、地区/州和城市的抽象模型,以便扩展和添加自定义字段。例如,我们可以通过编写post_导入信号处理程序将时区添加到城市中,如前所述Python 如何为django城市轻型乡村模式增加资本?,python,django,timezone,countries,django-countries,Python,Django,Timezone,Countries,Django Countries,我正在Django 1.8.x中使用(较轻版本的)。它定义了国家、地区/州和城市的抽象模型,以便扩展和添加自定义字段。例如,我们可以通过编写post_导入信号处理程序将时区添加到城市中,如前所述 同样,我需要向每个国家/地区添加资本字段。我对GeoDjango不太熟悉,我知道,django citiesapp的国家/地区拥有资本字段。您需要设置自定义国家/地区模型。 假设您有一个带有models.py的应用程序“mygeonames”: import cities_light from dja
同样,我需要向每个国家/地区添加
资本
字段。我对GeoDjango不太熟悉,我知道,django cities
app的国家/地区拥有资本字段。您需要设置自定义国家/地区模型。
假设您有一个带有models.py的应用程序“mygeonames”:
import cities_light
from django.db import models
from cities_light.settings import ICountry
from cities_light.receivers import connect_default_signals
from cities_light.abstract_models import (AbstractCountry, AbstractRegion,
AbstractCity)
class Country(AbstractCountry):
capital = models.CharField(max_length=50)
connect_default_signals(Country)
class Region(AbstractRegion):
pass
connect_default_signals(Region)
class City(AbstractCity):
pass
connect_default_signals(City)
def process_country_import(sender, instance, items, **kwargs):
instance.capital = items[ICountry.capital]
cities_light.signals.country_items_post_import.connect(process_country_import)
然后在settings.py中,您应该指定CITIES\u LIGHT\u APP\u NAME='mygeonames'
,并将这两个应用程序'CITIES\u LIGHT'和'mygeonames'放入已安装的应用程序中
之后,您可以迁移数据库并运行/manage.py cities\u light
最后,您应该得到如下结果:
In [1]: from mygeonames.models import Country
In [2]: cc = Country.objects.all()
In [3]: cc[0].capital
Out[3]: u'Paris'
但您可能希望改为链接到Cities表。这里有一个关于@irqed答案的扩展想法:
class City(AbstractCity):
is_capital = models.BooleanField()
class Country(AbstractCountry):
def capital(self):
return self.city_set.filter(is_capital=True)
*请注意,我不熟悉该软件包(我只是假设他们使用city\u set
作为相关名称)
为什么??嗯,对我来说,首都作为一个城市的属性似乎更有意义。在尝试使用City
对象时,它还可以为您节省一些时间(例如,您想检查一个城市是否是首都-您不需要在另一个表上进行另一次查询并比较名称,您只需检查已获取的布尔字段即可)完美<代码>我的国家。资本
是我要找的关键。是的,我必须查询大写的城市对象。非常感谢!很好的信息,我使用了相同的方法添加。邻国到国家,它像一个符咒一样工作。我唯一想添加的是,至少在我的案例中,您必须首先使用过程\u country\u import()填充新表,对我的要求进行注释@irqed的答案非常适合。顺便说一句,如果您将答案更新为将is_capital
设置为True
或False
,这将非常有用。在通过city light应用程序提供的管理命令填充城市模型时,他们是这样做的吗?我不熟悉该应用程序,但如果你可以在那里预填充信息,我相信你也可以对布尔字段执行同样的操作