Уведомления

Группа в Telegram: @pythonsu

#1 Июль 10, 2010 11:17:07

razum2um
От:
Зарегистрирован: 2009-03-20
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

mptt на sqlite3&mysql

Я уже пау дней прибываю в недоумении, почему ни у кого нет проблемы с гомогеннымдеревом модели постороенным mptt
c мускулом

модель

import mptt
class Category(models.Model):
name = models.CharField(max_length=50, unique=True)
parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
def __unicode__(self):
return self.name

mptt.register(Category, order_insertion_by=['name'])
ошибка
>>> from main.models import Category as c
>>> r=c(name='root')
>>> r.save()
/usr/lib64/python2.6/site-packages/django/db/backends/mysql/base.py:86: Warning: Field 'lft' doesn't have a default value
return self.cursor.execute(query, args)
/usr/lib64/python2.6/site-packages/django/db/backends/mysql/base.py:86: Warning: Field 'rght' doesn't have a default value
return self.cursor.execute(query, args)
/usr/lib64/python2.6/site-packages/django/db/backends/mysql/base.py:86: Warning: Field 'tree_id' doesn't have a default value
return self.cursor.execute(query, args)
/usr/lib64/python2.6/site-packages/django/db/backends/mysql/base.py:86: Warning: Field 'level' doesn't have a default value
return self.cursor.execute(query, args)
>>>
и созданная таблица

CREATE TABLE `main_category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`parent_id` int(11) DEFAULT NULL,
`lft` int(10) unsigned NOT NULL,
`rght` int(10) unsigned NOT NULL,
`tree_id` int(10) unsigned NOT NULL,
`level` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `main_category_63f17a16` (`parent_id`),
KEY `main_category_42b06ff6` (`lft`),
KEY `main_category_91543e5a` (`rght`),
KEY `main_category_efd07f28` (`tree_id`),
KEY `main_category_2a8f42e8` (`level`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
а теперь в шоке:
на sqlite3 модель работает как надо
и таблица ДРУГАЯ

CREATE TABLE "main_category" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(50) NOT NULL UNIQUE,
"parent_id" integer
)
ВСЕ что я сделал, только поменял имена баз в settings (1.2.1)
Откуда такая разница?!



Офлайн

#2 Июль 10, 2010 12:27:27

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

mptt на sqlite3&mysql

Потому что код SQL, который создает таблицу, генерирует другой модуль.



Офлайн

#3 Июль 10, 2010 13:55:10

razum2um
От:
Зарегистрирован: 2009-03-20
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

mptt на sqlite3&mysql

хорошо. тогда вопрос в лоб: как победить вышеданную ошибку?



Отредактировано (Июль 29, 2010 15:22:23)

Офлайн

#4 Авг. 2, 2010 17:53:33

Ymilij
От:
Зарегистрирован: 2010-08-02
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

mptt на sqlite3&mysql

Проделал описанное автором поста. Ошибку подтверждаю.
Ошибка:

>>> from testmodulesdjango.models import Category as model
>>> root=model(name='root')
>>> root.save()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib64/python2.6/site-packages/django/db/models/base.py", line 435, in save
self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/usr/lib64/python2.6/site-packages/django/db/models/base.py", line 528, in save_base
result = manager._insert(values, return_id=update_pk, using=using)
File "/usr/lib64/python2.6/site-packages/django/db/models/manager.py", line 195, in _insert
return insert_query(self.model, values, **kwargs)
File "/usr/lib64/python2.6/site-packages/django/db/models/query.py", line 1479, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/lib64/python2.6/site-packages/django/db/models/sql/compiler.py", line 783, in execute_sql
cursor = super(SQLInsertCompiler, self).execute_sql(None)
File "/usr/lib64/python2.6/site-packages/django/db/models/sql/compiler.py", line 727, in execute_sql
cursor.execute(sql, params)
File "/usr/lib64/python2.6/site-packages/django/db/backends/util.py", line 15, in execute
return self.cursor.execute(sql, params)
File "/usr/lib64/python2.6/site-packages/django/db/backends/mysql/base.py", line 86, in execute
return self.cursor.execute(query, args)
File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", line 175, in execute
if not self._defer_warnings: self._warning_check()
File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", line 89, in _warning_check
warn(w[-1], self.Warning, 3)
Warning: Field 'lft' doesn't have a default value
>>> import mptt
>>> mptt.VERSION
(0, 3, 'pre')



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version