Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为django城市轻型乡村模式增加资本?_Python_Django_Timezone_Countries_Django Countries - Fatal编程技术网

Python 如何为django城市轻型乡村模式增加资本?

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

我正在Django 1.8.x中使用(较轻版本的)。它定义了国家、地区/州和城市的抽象模型,以便扩展和添加自定义字段。例如,我们可以通过编写post_导入信号处理程序将时区添加到城市中,如前所述


同样,我需要向每个国家/地区添加
资本
字段。我对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应用程序提供的管理命令填充城市模型时,他们是这样做的吗?我不熟悉该应用程序,但如果你可以在那里预填充信息,我相信你也可以对布尔字段执行同样的操作