2015-05-28 197 views
2

我正在構建一個使短網址的服務。我有型號:Django模型完整性錯誤:NOT NULL約束失敗:

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

我做錯了什麼?

+1

'url_to_short' FK字段是需要在您的模型,但你忘了填寫它。 – danihp

+2

你創建一個'LongURL'而不給它一個'ShortURL',這是一個錯誤。如果這是一個有效的情況,請按照以下所述使ShortURL字段可選:https://stackoverflow.com/questions/6619984/can-i-make-the-foreign-key-field-optional-in-django-model – l4mpi

回答

4
class LongURL(models.Model): 
    name = models.CharField(max_length = 100, null=True) 
    url_to_short = models.ForeignKey(ShortURL) 

你已經設置它的方式,url_to_short外鍵是不可選。所以,當你試圖保存:

>>> a = LongURL(name = 'hello_long_link') 
>>> a.save() 

Django是想告訴你,你沒有提供你a模型實例的url_to_short關係。

你要麼需要

  • 提供的SHORTURL關係,當您創建LongURL實例
  • 充分利用url_to_short關係可選的null=True, blank=True
+0

這是特別令人困惑的,因爲我有另外一個例子,其中'default = None'在相同的情況下工作,但現在似乎需要(?)'null = True,blank = True'。 – szeitlin

相關問題