2014-11-11 12 views
5

Sto scrivendo un sito Web in Django e desidero avere blog diversi per diverse categorie di post. Ho un Post modello, che usa un ForeignKey per il modello Blog.Utilizzo di una chiave ForeignKey, il vincolo NON NULL non è riuscito

Dopo l'aiuto utile mi è stata data here, ho:

class Blog(models.Model): 
    # category of the blog 
    category = models.CharField(max_length=50) 
    # its title (for the view) 
    title = models.CharField(max_length=100) 
    # its url (for url.py) 
    url = models.URLField() 

class Post(models.Model): 
    # blog 
    blog = models.ForeignKey(Blog, null=True) 
    # other fields 
    # ... 

ogni volta che provo python manage.py migrate pad ricevo

sqlite3.IntegrityError: NOT NULL constraint failed: pad_post__new.blog_id 

The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 

[...] 

django.db.utils.IntegrityError: NOT NULL constraint failed: pad_post__new.blog_id 

Devo impostare un id in Blog esplicitamente? Ho provato con diverse combinazioni di blank=null e null=True in diversi campi, ma ottengo sempre questo errore.

+1

Prima di tutto, si dovrebbe pulire migrazioni precedenti. Puoi assicurarti che il precedente python manage.py schemamigration pad --auto file sia rimosso, per rigenerarlo di nuovo con le modifiche del modello della tua condizione nulla? – xecgr

+0

hai già eseguito makemigrations ??? – cdvv7788

+0

xecgr: rimuovo tutti i file .py tranne __init__.py e 0001_initial.py in pad/migrazioni? (Non voglio rompere tutto.) cdvv7788: Sì, eseguo makemigrations. Senza alcun problema – mmcasetti

risposta

1

Al posto di una risposta da OP, la soluzione consigliata in questo caso è quello di garantire aver pulito le eventuali migrazioni persistente ricostruendo/rendendo le migrazioni dalla nuova copia del modello utilizzando il seguente:

python manage.py makemigrations pad 

In questo caso, ricordare che pad fa riferimento al nome dell'applicazione dell'utente. Si può lasciare fuori del comando per fare migrazioni fresche su tutta la linea:

python manage.py makemigrations 

Una volta completato è possibile eseguire sia la migrazione app-specifica o generale:

#Specific for this case 
python manage.py migrate pad 
#or Rebuild all available migrations 
python manage.py migrate 

Se, dopo questo, hanno ancora un problema, quindi il tuo modello ha un problema.

+0

Penso che la domanda sia: cosa c'è di sbagliato nei modelli? Sto avendo lo stesso problema, e nessuna delle risposte qui è stata utile. – szeitlin

0

Ho avuto esattamente lo stesso problema, e fissato con l'aggiunta di vuoto = True quando si specifica il ForeignKey, come suggerito in this thread

Speranza che aiuta ..

Problemi correlati