簡體   English   中英

django.db.utils.OperationalError:Shell 命令 forloop 中的外鍵不匹配

[英]django.db.utils.OperationalError: foreign key mismatch in Shell command 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'

現在,我的 settings.py 文件中存儲了 150 多個值的龐大列表,我想將其添加到 Category 模型中

CATEGORY_LIST = ['value', 'value2', ...., 'valueN'] 看起來像這樣

這是我在 shell 中執行腳本

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解釋器錯誤地引用了“組織”模型而不是“類別”模型的“組織”字段,這是一個命名約定問題。 我現在已經解決了

Mysite_category 的 id 沒有 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 設為主鍵。 有很多選擇可以做到這一點。 把id設為PK,就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM