Django:使用现有数据扩展现有应用程序/模型

时间:2013-12-26 19:51:56

标签: django django-models

我的应用程序和模型设置如下。

申请表A:

此应用程序已经预先填充了将要使用的数据 通过项目中的一些应用程序,所以我不想拥有 这些数据重复。

models.py

class Countries(models.Model):
    name = models.CharField(max_length=100)
    country_code = models.PositiveSmallIntegerField()

class Region(models.Model):
    name = models.CharField(max_length=100)
    country_name = models.ForeignKey(Countries)

class Cities(model.Model):
    name = models.CharField(max_length=100)
    country_name = models.ForeignKey(Countries)
    region_name = ChainedForeignKey(
        Regions,
        chained_field="country_name",
        chained_model_field="country_name",
        show_all=False,
        auto_choose=False,
    )

申请表B:

我希望扩展应用程序A中的模型,以便我可以添加 项目主要部分将使用的其他字段。 我理解如何从应用程序A扩展模型,但不确定 如何正确地做到这一点,以便应用程序C也正常工作。 这些表中只应包含额外的字段。我不想复制 应用程序A中的数据。

申请C - 项目的主要部分:

在这里,我想使用ForeignKey / ChainedForeignKey来选择位置 并改善位置。选择国家/地区后,它只会显示给您 该国家/地区的可用区域。一旦你选择了Region 您只会看到这些地区的城市。我用过ChainedForeignKey 之前,所以我对此很熟悉。

此处的选择应基于应用程序B中的模型。 将根据需要启用地区和城市。

我现在有什么。 申请A如上所示。

申请表B:

class BaseLocation(models.Model):
    searchable = models.BooleanField('Searchable', default=True, help_text='Enables or Disables item for searching.')
    hidden = models.BooleanField('Hidden', help_text='Allows you to create searches without showing the item on the search page.')
    default = models.BooleanField('Default', help_text='Sets the default that will be used in forms.')
    enabled = models.BooleanField('Enabled', help_text="Enables or Disables item.", default=False)
    deprecated = models.BooleanField('Deprecated', help_text='Item should no longer be used.')

    class Meta:
        abstract = True

class Country(BaseLocation):
    country = models.ForeignKey(Countries, unique=True)

class Region(BaseLocation):
    country = models.ForeignKey(Country, to_field='country')
    region = ChainedForeignKey(
        Regions,
        chained_field='country',
        chained_model_field='country_name',
        show_all=False,
        auto_choose=True,
    )

class City(BaseLocation):
    country = models.ForeignKey(Country, to_field='country')
    region = ChainedForeignKey(
        Regions,
        chained_field='country',
        chained_model_field='country_name',
        show_all=False,
        auto_choose=True,
    )
    city = ChainedForeignKey(
        Cities,
        chained_field='region',
        chained_model_field='region_name',
        show_all=False,
        auto_choose=True,
    )

申请C:

class Property(models.Model):
    property_listing = models.CharField(max_length=50)
    country = models.ForeignKey(Country, to_field='country')
    region = ChainedForeignKey(
        Region,
        chained_field='country',
        chained_model_field='country',
        show_all=False,
        auto_choose=True,
    )
    city = ChainedForeignKey(
        City,
        chained_field='region',
        chained_model_field='region',
        show_all=False,
        auto_choose=True,
    )

应用程序C的问题是我可以在国家/地区进行查找,但是当引用应用程序B或A时,不会填充区域和城市。由于额外的字段,我需要它来使用应用程序B.已添加到模型中。

不确定我正在寻找的是否真的可以完成。

如果有人对如何做到这一点有任何想法,我会很感激。

1 个答案:

答案 0 :(得分:0)

解决。问题是我没有为__unicode__的模型返回正确的值,但是在我尝试使用smartselect用于查找的URL之前没有明确的错误消息。