django.db.utils.OperationalError: несоответствие внешнего ключа в команде Shell forloop
Я работаю над следующими двумя моделями Django:
Модель организации с внешним ключом "Пользователь как" и списком "Категория" с внешним ключом "Организация".
Ниже приведены модели:
# Create your models here.
from django.contrib.auth.models import User
from django.db import models
class Organisation(models.Model):
user = models.ForeignKey(
User,
on_delete=models.CASCADE,
null=True
)
organisation_name = models.TextField(
primary_key=True,
blank=True
)
def __str__(self):
return self.organisation_name
class Category(models.Model):
# renamed organisation to organisation_name
organisation_name = models.ForeignKey(
Organisation,
on_delete=models.SET_NULL,
null=True
)
category = models.TextField(
blank=True,
max_length=200
)
class Meta:
verbose_name_plural = 'Category'
Теперь у меня есть огромный список из 150+ значений, хранящихся в моем файле settings.py, которые я хочу добавить в модель категории.
CATEGORY_LIST = ['value', 'value2',...., 'valueN'] выглядит следующим образом
Это скрипт, который я выполняю в оболочке:
from Venter.models import Organisation, Category
from Backend import settings
cat_list = settings.CATEGORY_LIST # the list is getting loaded into cat_list
org_name = Organisation.objects.get(organisation_name='ABC') # exists
for x in cat_list:
Category.objects.create(organisation=org_name, category=x)
Однако я сталкиваюсь со следующей ошибкой:
django.db.utils.OperationalError: foreign key mismatch - "Mysite_category" referencing "Mysite_organisation"
где: Mysite - это имя моего приложения в проекте Django.
Пожалуйста помоги! Спасибо
ОБНОВЛЕНИЕ: Решение:
Интерпретатор Python неправильно ссылался на модель "Организация", а не на поле "организация" модели "Категория", это была проблема соглашения об именах. Я сейчас решил это
2 ответа
(Размещено решение от имени автора вопроса).
Интерпретатор Python неправильно ссылался на модель "Организация", а не на поле "Организация" модели "Категория", это была проблема соглашения об именах. Я теперь решил это
Mysite_category имеет идентификатор без PK. то же самое во второй таблице Mysite_organisation.
CREATE TABLE "Mysite_category" (
"id" integer NOT NULL,
"name" varchar(255) NOT NULL,
"description" text NOT NULL,
PRIMARY KEY("id" AUTOINCREMENT)
);
сфокусируйтесь на идентификаторе, и тот же запрос будет для второй таблицы. это не важно, вы должны сделать id в качестве первичного ключа с помощью этого запроса. есть так много вариантов для этого. сделайте id как PK, все будет хорошо.