2011-12-01 8 views
38

私はItemオブジェクトがブール値のプロパティーactiveを持つDjangoサイトを持っています。私は真の、またその逆に偽からプロパティを切り替えるために、このような何かをしたいと思います:変数に返されたブール値を否定する方法はありますか?

def toggle_active(item_id): 
    item = Item.objects.get(id=item_id) 
    item.active = !item.active 
    item.save() 

この構文は、多くのCベースの言語では有効ですが、Pythonで無効なようです。使用せずにこれを行うにはそこに別の方法がある:

if item.active: 
    item.active = False 
else: 
    item.active = True 
item.save() 

ネイティブのpython neg()方法が整数ではなく、ブールの否定の否定を返すようです。

ありがとうございました。あなたがこれを行うことができます

答えて

85

:トリックを行う必要があります

item.active = not item.active

:)

12

item.active = not item.activeはニシキヘビの方法

13

ですが、私はあなたが

item.active = not item.active 
6

たいと思いますブール値の否定はです。

def toggle_active(item_id): 
    item = Item.objects.get(id=item_id) 
    item.active = not item.active 
    item.save() 

ありがとうございました。

5

行うために、そのシンプル:それを行うには(以下 簡潔 、読める以上の演算)の方法は次のようになり

def toggleActive(item_id): 
    item = Item.objects.get(id=item_id) 
    item.active = not item.active 
    item.save() 
8

別:

item.active = not item.active 

をだから、最終的にあなたがなってしまいます

item.active = bool(1 - item.active) 
+0

+1 OMG、これは可能なことを知らなかった、それは意味をなさないが、私はそれについて考えなかった!!素晴らしい答え! ( 'bool(1-True)'は少し遅く、 'not True'です) –

+0

可能です。有用?そうは思わない!あなたがほとんどの言語でできるような醜いものがたくさんありますが、これはほとんどの読者にとってひどく混乱しています。おそらく非常に特殊な文脈では、これは意味をなさないかもしれません... – BuvinJ

関連する問題