【发布时间】:2022-01-09 14:50:35
【问题描述】:
我有一个简单的模型。该表在 db 中有一些条目。而且,它们的category 字段不为空:
# blog.models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
category = models.CharField(max_length=50)
我想将category 字段更改为外键。
category 表创建如下,这些字段更改为外键:
# blog.models.py
from django.db import models
from account.models import User
class Category(models.Model):
title = models.CharField(max_length=50)
def __str__(self):
return self.title
class Article(models.Model):
title = models.CharField(max_length=100)
# category = models.CharField(max_length=50)
category = models.ForeignKey(Category, on_delete=models.SET_NULL,
null=True, blank=True,
default=Category.objects.get(title=title))
我有这些限制:
- 不应删除博客应用的
migration目录。 -
category键应指向具有相同title的类别对象。如果一个类别对象被删除,指向它的文章的类别字段应该为空。
这是我的问题:
当我执行migrate 时,django 说
提高 self.model.DoesNotExist( blog.models.Category.DoesNotExist: 类别匹配查询不存在。
这是因为我有几篇文章。但是,类别表是空的。因此,Django 没有找到任何类别对象来指向现有文章。
我试图删除category字段的默认值:
category = models.ForeignKey(Category, on_delete=models.SET_NULL,
null=True, blank=True )
但是,migrate 给出了这个错误:
raise IntegrityError(django.db.utils.IntegrityError: 中的行 主键为“1”的表“blog_article”具有无效的外键: blog_article.category_id 包含一个不 在 blog_category.id 中有对应的值。
将模型字段更改为指向包含某些数据的现有表的外键的正确方法是什么。
【问题讨论】:
标签: python django django-models foreign-keys