2009-11-28 3 views
22

J'ai ce modèleAutoriser null dans la clé étrangère à l'utilisateur. Django

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

dans l'admin je tente de creat un poste vacant sans utilisateur. Et il jette une erreur "club_vacancy.user_id ne peut pas être NULL". Est-ce que je fais quelque chose de mal?

Répondre

33

club_vacancy.user_id may not be NULL

ressemble beaucoup à une erreur de votre base de données, plutôt que de Django.

Il semble très probable que vous ayez ajouté null=True après avoir exécuté manage.py syncdb. Vous devrez modifier votre schéma de base de données pour autoriser les valeurs NULL dans cette colonne.

+2

bien j'ai couru syncdb avant et après j'ai ajouté null = true. Comment devrais-je modifier mon db? – barin

+5

syncdb ne modifie pas les tables qui existent déjà. Déposez la table et exécutez à nouveau syncdb, ou modifiez votre base de données manuellement ou utilisez une application de migration. –

+6

migrations application comme 'sud' – panchicore

-5

vous devez vous réinitialiser la table de base de données (depuis que syncdb ne met pas à jour les champs qui sont créés avec alredy null = False)

./manage.py reset your_app

OU s'il y a des données qui vous ne voulez pas perdre utiliser les commandes SQL pour supprimer le drapeau NOT NULL

2

Outre le sud, une autre option consiste à utiliser l'évolution django pour les changements de schéma.

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

installer avant de faire des changements de db. Ensuite, exécutez

python manage.py evolve --hint --execute 

Assurez-vous que si vous ajoutez un nouveau champ, vous autorisez (null=True) nulls ou bien évoluer vous donnera un message d'erreur.

+0

et si je ne veux pas autoriser le nouveau champ à être nul? Que fais-je? – barin

+0

Les nouvelles versions de Django ont des migrations intégrées. – Flimm

Questions connexes