2009-11-28 15 views
22

Ho questo modelloConsenti null in chiave esterna all'utente. Django

class Vacancy(models.Model): 
    user = models.ForeignKey(User, null=True, blank=True, default = None) 
    name = models.CharField(max_length=64) 

Quando in admin provo a creat un posto vacante, senza un utente. E genera un errore "club_vacancy.user_id potrebbe non essere NULL". Sto facendo qualcosa di sbagliato?

risposta

33

club_vacancy.user_id may not be NULL

assomiglia molto ad un errore dal database, piuttosto che da Django.

Sembra molto probabile che sia stato aggiunto null=True dopo aver eseguito manage.py syncdb. Dovrai modificare lo schema del tuo database per consentire valori nulli in quella colonna.

+2

bene ho eseguito syncdb prima e dopo ho aggiunto null = true. Come dovrei modificare il mio db? – barin

+5

syncdb non modifica le tabelle già esistenti. Rilasciare la tabella ed eseguire nuovamente syncdb oppure modificare manualmente il database o utilizzare un'app di migrazione. App di migrazione –

+6

come "sud" – panchicore

-5

è necessario resettare si tabella di database (dal momento che solo syncdb non aggiorna i campi che sono giá creati con null = false)

./manage.py ripristinare your_app

o se c'è alcuni dati che non vuoi perdere i comandi SQL per rimuovere NOT flag NULL

2

Oltre a Sud, un'altra opzione è usare l'evoluzione di django per le modifiche dello schema.

http://code.google.com/p/django-evolution/

installarlo prima di apportare modifiche db. Quindi eseguire

python manage.py evolve --hint --execute 

Assicurarsi che se si aggiunge un nuovo campo, si consente i null (null=True) o altro evolvere vi darà un messaggio di errore.

+0

Cosa succede se non voglio consentire al nuovo campo di essere nullo? Cosa faccio? – barin

+0

Le versioni di Django più recenti hanno migrazioni integrate. – Flimm

Problemi correlati