Django сводная таблица без идентификатора и первичного ключа - PullRequest
0 голосов
/ 07 марта 2020

В базе данных у меня есть 3 таблицы:

  1. languages
  2. cities
  3. city_language

city_language Таблица:

+-------------+---------------------+------+-----+---------+-------+
| Field       | Type                | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| city_id     | bigint(20) unsigned | NO   | PRI | NULL    |       |
| language_id | bigint(20) unsigned | NO   | PRI | NULL    |       |
| name        | varchar(255)        | NO   |     | NULL    |       |
+-------------+---------------------+------+-----+---------+-------+

Модель

class CityLanguage(models.Model):
    city = models.ForeignKey('Cities', models.DO_NOTHING)
    language = models.ForeignKey('Languages', models.DO_NOTHING)
    name = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'city_language'
        unique_together = (('city', 'language'),)

Модель не имеет поля идентификатора и первичного ключа, также в моей таблице нет есть идентификатор столбца. Если я запускаю этот код, я получаю сообщение об ошибке:

(1054, "Unknown column 'city_language.id' in 'field list'")

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

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

Я не хочу создавать столбец идентификаторов для сводной таблицы. Нет причин создавать столбец идентификаторов для сводной таблицы. Подскажите, пожалуйста, как мне правильно использовать сводную таблицу. Спасибо.

1 Ответ

0 голосов
/ 10 марта 2020

Django без primary_key не работает. Есть два способа выяснить это:

  • Создать идентификатор (тогда Django модель, вам не нужно добавлять первичный ключ)
  • Создайте другой уникальный столбец и установите его первичным ключ, а также сделал его уникальным.

На моей стороне я выбираю второй способ, создал столбец с именем: unique_key и в модели введите код.

unique_key = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

вам нужно импортировать uuid.

Удачи.

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