ФК от модели к внешнему ФК от другой модели в Джанго - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть модель "Города" в "external_app" приложение вроде этого:

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' должен установить unique = True, потому что этоссылается на внешний ключ ".

Когда я устанавливаю unique = True в поле CityRegions.City и пытаюсь выполнить миграцию, я получаю сообщение об ошибке:" django.db.utils.IntegrityError: Сбой ограничения UNIQUE... "

Вопрос в том, как опубликовать список используемых в CityRegions моделей городов в RegionSquares модели?

В общем приложении должно быть несколько моделей: - editanle списки областей города с текущим городом (должен отображаться регион и город) - редактируемый список подрайонов для каждого региона города (должен отображаться город, регион и субрегион) - редактируемый список улиц (город, область иподобласть должна быть показана)

Схема:

**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

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

city не является PK (первичным ключом) CityRegions, поэтому вы не должны ссылаться на него.Сбой уникальности, потому что уже есть повторяющиеся значения - это нормально.

Чтобы заставить это работать:

a) нормализуйте вашу модель данных и удалите поле city из RegionSquares - достигните его через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 определению этого поля.

upd

Опять же, если вы все еще задаете вопрос о том, как смоделировать продемонстрированные отношения (и избавитесь от всех ошибок, упомянутых в вашем вопросе), то ответ уже здесь - удалите city поле от RegionSquares модели.У вас уже есть ссылка на region, которая (запись региона) содержит значение city.Это опция a, описанная выше.

0 голосов
/ 28 февраля 2019

Причиной неудачной миграции может быть то, что у вас есть несколько CityRegions с одинаковыми city

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...