2009-11-28 2 views
22

У меня есть эта модельРазрешить null для внешнего ключа пользователю. Джанго

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

Когда в админ я стараюсь создающих вакансии без пользователя. И это вызывает ошибку: «club_vacancy.user_id может не быть NULL». Я делаю что-то неправильно?

ответ

33

club_vacancy.user_id may not be NULL

Выглядит очень похоже на ошибку из базы данных, а не из Джанго.

Похоже, вы добавили null=True после запуска manage.py syncdb. Вам нужно будет изменить схему базы данных, чтобы разрешить нулевые значения в этом столбце.

+2

Хорошо, я запускал syncdb до и после того, как я добавил null = true. Как мне изменить свой db? – barin

+5

syncdb не изменяет уже существующие таблицы. Удалите таблицу и снова запустите syncdb или вручную измените свою базу данных или используйте приложение миграции. –

+6

приложение миграции как «юг» – panchicore

-5

вам нужно сбросить вам таблицу базы данных (так как только SyncDB не обновляет поля, созданные с помощью настроек уже NULL = False)

./manage.py сброса your_app

ИЛИ если есть некоторые данные, которые вы не хотите потерять использование команд SQL, чтобы удалить флаг NOT NULL

2

Помимо юга, другой вариант заключается в использовании эволюции джанго для изменений схемы.

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

Установите его перед внесением изменений в БД. Затем запустите

python manage.py evolve --hint --execute 

Убедитесь, что при добавлении нового поля, вы позволяете обнуляет (null=True) или иначе эволюционируют выдаст сообщение об ошибке.

+0

Что делать, если я не хочу, чтобы новое поле было нулевым? Что я делаю? – barin

+0

Новые версии Django имеют встроенные миграции. – Flimm

Смежные вопросы