[英]Django Model IntegrityError: NOT NULL constraint failed:
我正在构建一个制作短网址的服务。 我有模型:
from django.db import models
class ShortURL(models.Model):
url = models.CharField(max_length = 50)
class LongURL(models.Model):
name = models.CharField(max_length = 100, null=True)
url_to_short = models.ForeignKey(ShortURL)
我已经运行了命令: python manage.py migrate
如果我打开解释器,使用python manage.py shell
并运行以下代码:
>>> from appshort.models import LongURL
>>> a = LongURL(name = 'hello_long_link')
>>> a.save()
然后我得到错误:
django.db.utils.IntegrityError: NOT NULL constraint failed: appshort_longurl.url_to_short_id
我做错了什么?
class LongURL(models.Model):
name = models.CharField(max_length = 100, null=True)
url_to_short = models.ForeignKey(ShortURL)
根据您的设置方式, url_to_short
外键不是 optional 。 因此,当您尝试保存时:
>>> a = LongURL(name = 'hello_long_link')
>>> a.save()
Django是想告诉你,你没有提供url_to_short
上你们的关系a
模型实例。
你需要要么
LongURL
实例时提供 ShortURL 关系null=True, blank=True
使url_to_short
关系可选。在为LongURL
创建条目时,您必须创建一个ShortURL
对象或过滤掉已经存在的对象(因为ForeignKey
字段不能留空)。 此外,您说有时您已经能够实现所需的行为。 这可能是因为在那些地方你会得到一个ShortURL
的对象,它不是null
。 但是,当您尝试在创建LongURL
期间发送空对象时,讨论中出现了错误。 例如:
...
short_url_obj = ShortURL.objects.filter(...).first()
# you have to ensure that this above query is not null
try:
new_long_url = LongURL(url_to_short=short_url_obj, name="some_name")
new_long_url.save()
except:
# if the short_url_obj is null
print("The short_url_obj was null, cannot save to database")
...
也可以使用if-else
块来代替,但我不建议这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.