Переключать логические поля из Queryset, используя F-объекты - PullRequest
3 голосов
/ 10 июля 2011

Я пробовал эти запросы с этими результатами:

queryset.update(done=not F('boolean'))
{'time': '0.001', 'sql': u'UPDATE "todo_item" SET "done" = True'}

queryset.update(done=(F('boolean')==False))
{'time': '0.001', 'sql': u'UPDATE "todo_item" SET "done" = False'}

То, что я хотел бы, примерно так:

queryset.update(done=F('done'))       
{'time': '0.002', 'sql': u'UPDATE "todo_item" SET "done" = "todo_item"."done"'}

Но с

SET "done" = !"todo_item"."done"

для переключения логического значения

Ответы [ 2 ]

2 голосов
/ 31 октября 2011

Я занимаюсь разработкой расширения django-orm и уже частично реализовал решение вашей проблемы.

>>> from django_orm.expressions import F
>>> from niwi.models import TestModel
>>> TestModel.objects.update(done=~F('done'))

# SQL:
UPDATE "niwi_testmodel" SET "done" = NOT "niwi_testmodel"."done"; args=()

https://github.com/niwibe/django-orm

Является частичным решением и не очень чистым. И пока только для postgresql. Через некоторое время я посмотрю, как его улучшить.

Обновление: теперь улучшено и работает на postgresql, mysql и sqlite.

0 голосов
/ 14 июня 2017
        #update_status
        update_status = (
          "UPDATE csv SET status = (NOT csv.status) "
          "WHERE id = %s")
        print(random_number)
        cursor.execute(update_status, (random_number))
        print("update_status")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...