Отношение ко многим ко многим Джанго - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть 2 таблицы в моей базе данных Postgres. В одном содержится несколько штатов из разных частей мира, а в другом - почтовый индекс этих штатов.

Это несколько почтовых индексов в одном городе. Но почтовый индекс - это ссылка только на один город.

Вот пример моих 2 таблиц:

Состояния:

+----+------------+-----------+-----------------------+
| pk |   state    | city      |         city_id       |
+----+------------+-----------+-----------------------+
|  1 | Montreal   | Quebec    |          123          |
+----+------------+-----------+-----------------------+
|  2 | Laval      | Quebec    |          123          |
+----+------------+-----------+-----------------------+
|  3 | Ottawa     | Ontario   |          837          |
+----+------------+-----------+-----------------------+

Почтовый индекс:

+----+------------+-----------+-----------------------+
| pk |Postal Code | city      |         city_id       |
+----+------------+-----------+-----------------------+
|  1 | H1H1H1     | Quebec    |          123          |
+----+------------+-----------+-----------------------+
|  2 | H4P2T5     | Quebec    |          123          |
+----+------------+-----------+-----------------------+
|  3 | G1G2G2     | Ontario   |          837          |
+----+------------+-----------+-----------------------+

Я использую django autocomplete-light для своего ввода, и теперь я хочу перенаправить мои штаты, чтобы отфильтровать мой почтовый индекс с полем city_id.

Проблема в том, что ошибки Django говорят мне:

'stateModel.city_id' must set unique=True because it is referenced by a foreign key.

когда я пытаюсь использовать внешний ключ, который не является уникальным, поскольку один и тот же город может использоваться в другом штате. И я получил эту ошибку, когда я пытаюсь использовать ManyToMany

ERREUR:  la relation « postalCodeModel_city_id » n'existe pas
LINE 1: ...COUNT(*) AS "__count" FROM "postalCodeModel" INNER JOIN "postalCodeModel...

когда я пытаюсь создать поле «один ко многим» или отправлять ПК по умолчанию, если я выбрал опцию ManyToManyField.

Есть ли способ отфильтровать почтовый индекс по городам из модели штата? Нужно ли создавать таблицу City, а после этого создавать для этой таблицы параметр ManyToManyField with Trought?

class stateModel(models.Model):
    idunique = models.IntegerField(unique=True, blank=True, null=True)
    state = models.TextField(blank=True, null=True)
    city = models.TextField(blank=True, null=True)
    city_id = models.TextField(blank=True, null=True)

    def __str__(self):
        return self.state

    class Meta:
        managed = False
        db_table = 'stateDB'


class codePostalModel(models.Model):
    cp_id = models.IntegerField(blank=True, null=True)
    cp = models.TextField(blank=True, null=True)
    #city_id_cp = models.TextField(blank=True, null=True)
    city_id_cp = models.ForeignKey(stateModel, to_field='city_id', blank=True, null=True, on_delete=models.CASCADE)
    #city_id_cp = models.ManyToManyField(stateModel)

    def __str__(self):
        return self.cp

    class Meta:
        managed = False
        db_table = 'postalCodeDB'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...