Найти - Пользователи
Полная версия: Проблемы с сохранением объектов.
Начало » Django » Проблемы с сохранением объектов.
1
$m1t
Есть вот такой набор моделей:
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)'}
EXSlim
Попробуйте принудительно указать 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')
$m1t
force_update почему то не работает, но проблема решилась отказом от кастомного менеджера. Большое спасибо.
Александр Кошелев
$m1t
force_update почему то не работает,
Обновите джангу
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB