Обнуляется ли поле в mysql?
Я видел эту ошибку в прошлом, когда создавал модель с полем, которое изначально не допускало обнуления, когда таблица создавалась, а затем изменялась, чтобы она могла обнуляться.Поскольку mysql имеет значение null = false, установленное при создании исходной таблицы, он не выполнит вставку, даже если django пропустит его.
Чтобы это исправить, я бы проверил определение таблицы в mysql, если поле имеет значение null= false, вы можете изменить его вручную или удалить таблицу (если вам не нужны данные), а затем повторно запустить ./manage.py syncdb для воссоздания таблицы.
Если выиспользуя south для управления миграциями схемы, вы можете создать новую миграцию схемы и затем запустить ее.
Если экземпляр таблицы mysql не показывает null = false, тогда это что-то другое.
Обновление: Мы обнаружили, что в mysql столбец имеет значение nullable, поэтому я обновляю ответ.
Я использую Django версии 1.2.5, какую версию вы используете?
Я создал модель в своей системе.
from django.db import models
#================================================================================
class Account(models.Model):
interest_rate = models.FloatField(null=True, blank=True)
А затем запустил ее через оболочку, и она сработала для меня.
Python 2.6.6 (r266:84292, Sep 8 2010, 16:19:33)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from aggra.models import Account
>>> account = Account()
>>> account.interest_rate = None
>>> account.save()
>>> exit()
Вот мое заявление о создании из django,aggra - это имя моего приложения.
$ python manage.py sql aggra
BEGIN;
CREATE TABLE `aggra_account` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`interest_rate` double precision
)
;
COMMIT;
Вот как выглядит мой стол из mysql.
CREATE TABLE `aggra_account` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`interest_rate` double DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
Это похоже на ваше?
Обновить2 Мы выяснили, что он выглядит одинаково и использует примерно одинаковую версию django и python.
Какая у вас версия mysql?
Что у вас за режим SQL?Моя пуста.
mysql> show variables where Variable_name = 'sql_mode';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_mode | |
+---------------+-------+
1 row in set (0.00 sec)
Если вы установили строгий режим, вам нужно будет изменить его, чтобы он был более снисходительным.
http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html
См. Также.
http://forums.mysql.com/read.php?11,132672,132693#msg-132693