Django не создает ограничений базы данных для внешних ключей с SQLite - PullRequest
0 голосов
/ 28 мая 2020

Я использую Django 3.0.6

Я добавляю ForeignKey и ManyToManyField к своим моделям, но я заметил, что django создает INDEX, но не фактические ограничения FOREIGN KEY в базе данных.

Я пытался явно установить db_constraint=True, но, как и ожидалось, бесполезно, так как это True по умолчанию.

Я нашел так много ответов, объясняющих это, но только для очень старых версий Django, делая трюки для его включения, когда он в противном случае был отключен. Теперь вместо этого он должен работать прямо из коробки. Ничего не нашел ВООБЩЕ относительно Django 3.


Код

class Token (models.Model):
    owner = models.ForeignKey(Chiefdom, on_delete=models.CASCADE, db_constraint=True)
    county = models.ManyToManyField(County, db_constraint=True)
    amount = models.PositiveSmallIntegerField()

SQLite

CREATE TABLE IF NOT EXISTS Piece_token (
  id integer PRIMARY KEY AUTOINCREMENT NOT NULL,
  amount smallint unsigned NOT NULL,
  owner_id integer NOT NULL
);

CREATE INDEX IF NOT EXISTS Piece_token_owner_id_d27c77f0 ON Piece_token (owner_id);

CREATE TABLE IF NOT EXISTS Piece_token_county (
  id integer PRIMARY KEY AUTOINCREMENT NOT NULL,
  token_id integer NOT NULL,
  county_id integer NOT NULL
);

CREATE INDEX IF NOT EXISTS Piece_token_county_county_id_57802417 ON Piece_token_county (county_id);

CREATE INDEX IF NOT EXISTS Piece_token_county_token_id_e7798ae9 ON Piece_token_county (token_id);

CREATE UNIQUE INDEX IF NOT EXISTS Piece_token_county_token_id_county_id_b06b16cc_uniq ON Piece_token_county (token_id, county_id);

1 Ответ

0 голосов
/ 28 мая 2020

Я проверил сейчас с той же версией Django и SQLite, присутствуют ли все внешние ключи

Например

SELECT * FROM pragma_foreign_key_list('auth_user_groups');

Result

Обратите внимание, что все внешние ключи откладываются и проверяются из Django -> источника

...