【问题标题】:FK from model to external FK from another model in Django从模型的 FK 到 Django 中另一个模型的外部 FK
【发布时间】:2019-02-28 11:14:59
【问题描述】:

我在 "external_app" 应用中有这样的模型 "Cities"

class Cities(models.Model):
CityName = models.CharField(max_length=50, blank=False, db_index=True)
slug = models.SlugField(max_length=50, db_index=True, unique=True)

我有第二个应用,“Address_program”,模型很少:

class CityRegions(models.Model):
    city = models.ForeignKey('external_app.Cities', default=0, verbose_name=' City', related_name='City_for_region')
    city_region = models.CharField(max_length=200, blank=False, default='', verbose_name='City region', unique=True)
    city_region_slug = models.SlugField(verbose_name='City region slug')

区域中子区域的第二个模型。现在我想在 CityRegions 模型中发布使用过的城市。我尝试为城市字段添加 FK

class RegionSquares(models.Model):
city = models.ForeignKey(CityRegions, default=0, verbose_name='City', related_name='City_for_regionsquare', to_field='city')
region = models.ForeignKey(CityRegions, default=0, verbose_name='City region',related_name='Region')
    region_square = models.CharField(max_length=200, blank=False, default='', verbose_name='City sub-region')
    region_square_slug = models.SlugField(verbose_name='City sub-region slug')

当我尝试进行迁移时,我收到错误消息 "(fields.E311) 'CityRegions.city' must set unique=True because it is referenced by a foreign key"。

当我在 CityRegions.City 字段中设置 unique=True 并尝试迁移时,我收到错误消息:“django.db.utils.IntegrityError: UNIQUE constraint failed...”

问题是如何在RegionSquares模型中发布用于CityRegions模型城市的列表?

在普通应用中应该有几个模型: - 当前城市的城市区域编辑列表(应显示区域和城市) - 每个城市区域的可编辑子区域列表(应显示城市、区域和子区域) - 可编辑的街道列表(应显示城市、区域和次区域)

方案:

**cities** (model. Used in another apps of the project)
  |-->**citie's regions** (parent for sub-regions) (city and region should me show in admin)
      |--> **region's sub-regions** (parent for streets) (city,region and sub-region should me show in admin)
          |--> **list of streets** (city,region, sub-region and street should me show in admin)

样本数据:

**Cities:** Moscow, Novosibirsk, Kemerovo
**Regions (city is parent):** Moscow - SVAO, Moscow - TSAO, Novosibirsk - Centralnij, Kemerovo - Jugniy
**Sub regions (City and region are parents):** Moscow - SVAO - sub-region A; Moscow - SVAO - subregion B; Moscow - SVAO sub-region C. Novosibirsk - Centralnij - sub-region A. Novosibirsk - Centralnij - sub-region B
**Streets (City, region and sub-region are parents):** Moscow - SVAO - sub-region A - street A; Moscow - SVAO - sub-region A - street B; Moscow - SVAO - sub-region A - street C; Novosibirsk - Centralnij - sub-region B -s treet A; Novosibirsk - Centralnij - sub-region B street B... and so on

想要的结果:

Moscow
   Moscow - SVAO
     Moscow - SVAO - sub-region A
         Moscow - SVAO - sub-region A - street A
         Moscow - SVAO - sub-region A - street B
         Moscow - SVAO - sub-region A - street C
     Moscow - SVAO - sub-region B
         Moscow - SVAO - sub-region B - street A
         Moscow - SVAO - sub-region B - street B
         Moscow - SVAO - sub-region B - street C
     Moscow - SVAO - sub-region C
         Moscow - SVAO - sub-region C - street A
         Moscow - SVAO - sub-region C - street B
         Moscow - SVAO - sub-region C - street C
Novosibirsk
   Novosibirsk - Centralnij
     Novosibirsk - Centralnij - sub-region A - street A
     Novosibirsk - Centralnij - sub-region A - street B
     Novosibirsk - Centralnij - sub-region A - street C

and so on...

我使用 Django 1.11 和 python 2.7.10

【问题讨论】:

    标签: python django django-models foreign-keys


    【解决方案1】:

    迁移失败的原因可能是您有多个CityRegions 和相同的city

    【讨论】:

      【解决方案2】:

      city 不是 CityRegions 的 PK(主键),所以你不应该引用它。唯一性失败是因为已经存在重复值 - 这很好。

      为了让它工作:

      a) 规范化您的数据模型并从 RegionSquares 中删除 city 字段 - 需要时通过 region 实现它。赞CityRegions.objects.filter(region__city__CityName='Moscow')

      b) 参考City 模型本身:

      class RegionSquares(models.Model):
          city = models.ForeignKey('external_app.Cities', default=0, verbose_name=' City', related_name='City_for_region')
          ...
      

      等同于CityRegions这个字段的定义。

      更新

      再次,如果您的问题仍然是关于 如何建模 演示的关系(并消除您的问题中提到的所有错误),那么答案已经在这里 - 删除 city 字段RegionSquares 型号。您已经有指向region 的链接,其中(区域记录)包含city 值。这是上面描述的选项a

      【讨论】:

      • 感谢您的回答。我知道如何在视图模型中输出城市。但我应该在 CityRegions 模型中显示 Django 管理中使用的城市
      • 你想在单条记录的字段中有一个列表吗?
      • 什么意思?顺便说一句,你可以写俄语。
      • 请在您的问题中添加示例数据和所需结果。 ps 这个网站只有英文版。
      • 增加了示例数据和一些解释。
      猜你喜欢
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 2020-09-11
      • 1970-01-01
      相关资源
      最近更新 更多