Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 23, 2008 19:47:31

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с сохранением объектов.

Есть вот такой набор моделей:

class CoreObject(Model):
name = CharField(max_length = 250, blank = True)
owner = ForeignKey(User)
date = DateTimeField(auto_now = True)

class Meta:
abstract = True


class ObjectManager(Manager):
def get_query_set(self):
return super(ObjectManager, self).get_query_set().filter(removed = False)


class RemovedObjectManager(Manager):
def get_query_set(self):
return super(RemovedObjectManager, self).get_query_set().filter(removed = True)


class ModerableObject(CoreObject):
moderators = ForeignKey(ModeratorsGroup, blank = True, null = True)
removed = BooleanField(default = False)

class Meta:
abstract = True

class Post(ModerableObject):
root = ForeignKey(Thread)
text = TextField()
objects = ObjectManager()
removed_objects = RemovedObjectManager()
Для удаления/отмены-удаления постов я использую такие функции:
def remove(request, type, id):
mo = Post.objects.get(id = int(id))
print mo.removed
mo.removed = True
mo.save()

return HttpResponse('ok')


def unremove(request, type, id):
mo = Post.removed_objects.get(id = int(id))
print mo.removed
mo.removed = False
mo.save()
return HttpResponse('ok')
Функция remove отрабатывает нормально, а unremove при вызове метода save выдает ошибку:
Exception Type: IntegrityError at /unremove/post/1/
Exception Value: (1062, “Duplicate entry ‘1’ for key 1”)

В чем дело, мне не ясно =(
Кто нибудь, проясните пожалуйста, уже второй день с ошибкой бьюсь.

Раньше у меня было наследование не от абстрактных классов - думал проблема в этом, переписал - проблема осталась.

Джанго пытается почему то выполнить INSERT вместо UPDATE:

{'time': ‘0.000’, ‘sql’: u'INSERT INTO `comments_post` (`id`, `name`, `owner_id`, `date`, `moderators_id`, `removed`, `root_id`, `text`) VALUES (2, , 1, 2008-08-23 12:20:52, None, False, 1, 123)'}



Отредактировано (Авг. 23, 2008 20:22:24)

Офлайн

#2 Авг. 24, 2008 11:56:47

EXSlim
От:
Зарегистрирован: 2008-06-07
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с сохранением объектов.

Попробуйте принудительно указать update

def unremove(request, type, id):
mo = Post.removed_objects.get(id = int(id))
print mo.removed
mo.removed = False
mo.save(force_update = True)
return HttpResponse('ok')



Отредактировано (Авг. 24, 2008 11:57:33)

Офлайн

#3 Авг. 24, 2008 14:23:48

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с сохранением объектов.

force_update почему то не работает, но проблема решилась отказом от кастомного менеджера. Большое спасибо.



Офлайн

#4 Авг. 26, 2008 19:24:03

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблемы с сохранением объектов.

$m1t
force_update почему то не работает,
Обновите джангу



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version