Ошибка в Django querySet? - PullRequest
       6

Ошибка в Django querySet?

0 голосов
/ 02 февраля 2012

Я пытаюсь разработать модуль друзей, чтобы познакомиться с django. Теперь появилось очень странное поведение, которому я не могу следовать. Думаю, за ним трудно следовать, но я был бы очень признателен за помощь.

Когда я создаю экземпляр набора запросов для обновления некоторых значений, django создает правильный sqlquery, но в моей базе данных mysql данные не обновляются.

Даже если я напечатаю результат, django скажет мне правильные значения, которые «должны» поступить из БД ... но на самом деле это не так?

Мои запросы выглядят следующим образом:

friend_update=Friends.objects.filter(user_me=self.user_id, user_he = friend_id, 
                          permission_he = True, 
                          permission_me = True).update(permission_me=False)
see_friend_update=Friends.objects.filter(user_me=self.user_id, user_he = friend_id, 
                          permission_he = True, permission_me = False)
#Save to DB#
for item in see_friend_update:
    item.save()

for i in see_friend_update:
    print "user me is %s with id %d permission_me set to %s, user_he is %s with id %d " %\
            (i.user_me,i.user_me.id,i.permission_me, i.user_he, i.user_he.id)

### After updating friends permissions, this sets the permission of the counterpart        

friend_update_vice_versa = Friend.objects.filter(user_me=friend_id, user_he = self.user_id, 
                            permission_he = True,
                            permission_me = True).update(permission_he=False)
 see_friend_update_vice = Friend.objects.filter(user_me=friend_id, user_he = self.user_id,
                            permission_he = False, permission_me = True)
for e in see_friend_update_vice:
    print "user me is %s with id %d permission_he set to%s, user_he is %s with id %d " % \
        (e.user_me,e.user_me.id,e.permission_he, e.user_he, e.user_he.id) 

Джанго выдает следующие значения:

user me - тестер с id 2 access_me, установленным в False (в БД все еще "True"!), User_he - tester232 с id 1

пользователь me - это tester232 с идентификатором 1 для_применения_ он установлен в значение "Ложь" (в БД он по-прежнему "True"!), Пользователь__ является тестером с идентификатором 2

user me - это тестер с id 2 access_me, установленным в False (это действительно работает!), User_he - это tester232 с id 1

Надеюсь, я достаточно хорошо объяснил проблему, чтобы не было слишком сложно ...

Ответы [ 2 ]

1 голос
/ 04 февраля 2012

Вы пытались удалить

for item in see_friend_update:
    item.save()

из вашего кода? Это, кажется, не делает ничего полезного.

0 голосов
/ 03 февраля 2012

Хорошо, я понял, в чем проблема: это кеширование набора запросов.Я все еще думаю, что это ошибка .. но это решает проблему:

from django.db import transaction
a=Friends.objects.filter(user_me=self.user_id, user_he = friend_id, permission_he =True, permission_me = True).update(permission_me=False)
transaction.enter_transaction_management()
transaction.commit() 

Так что это был НЕ мой глупый код, я думаю ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...