2017-01-01 123 views
0

我看到這個錯誤,當我運行我的代碼:「NOT NULL約束失敗」甚至「空=真」

NOT NULL constraint failed: blog_post.category_id 

下面是代碼:

class Post(models.Model): 
    class Meta: 
     verbose_name='Запись' 
     verbose_name_plural='Записи' 

    author = models.ForeignKey('auth.User') 
    category = models.ForeignKey('Theme', default=None, blank=True, null=True) 
    title = models.CharField(max_length=200,verbose_name='Заголовок') 
    text = RichTextField(verbose_name='Текст') 
    created_date = models.DateTimeField(verbose_name='Время создания',default=timezone.now) 
    published_date = models.DateTimeField(verbose_name='Время публикации',blank=True, null=True) 


    def publish(self): 
     self.published_date = timezone.now() 
     self.save() 
    def approved_commentimages(self): 
     return self.comments.filter(approved_comment=True) 

    def __str__(self): 
     return self.title 

class Theme(models.Model): 
    class Meta: 
     verbose_name='Категория' 
     verbose_name_plural='Категории' 

    title = models.CharField(verbose_name='Заголовок', max_length=40) 
    slug = models.SlugField(verbose_name='Транслит', null=True) 
    def __str__(self): 
     return self.title 

我是什麼做的不對?

+0

[允許在用戶的外鍵中允許空值。 Django](http://stackoverflow.com/questions/1812806/allow-null-in-foreign-key-to-user-django) –

+0

爲了擴大這一點 - 你運行'makemigrations'和'migrate'爲你做了這個改變後的應用程序? – Withnail

+0

是的,我在更改後使用遷移。這是錯誤發生在我嘗試做的地方。 –

回答

0

如果您刪除或修改遷移文件,您的實際數據庫可能與您的模型文件不同步,並且在運行makemigrations時可能會說沒有檢測到更改,即使文件與實際數據庫不同,也會發生這種情況。

您可以通過登錄到您的MySQL數據庫並檢查實際的空約束來驗證這一點。你會發現它可能會說它不能爲空,即使你的文件說明它可以。

最簡單的解決方案是創建一個新的數據庫並運行migrate。但是,如果您的數據庫中已有大量數據,並且希望避免創建新數據並遷移數據,則可以嘗試再次手動將數據庫與模型同步。

+2

這對你有幫助嗎? –

相關問題