2011-12-01 16 views
38

मेरे पास एक Django साइट है, जिसमें Item ऑब्जेक्ट है जिसमें बूलियन प्रॉपर्टी active है। मैं यह सच है और इसके विपरीत करने के लिए झूठी से संपत्ति टॉगल करने के लिए कुछ इस तरह करना चाहते हैं:क्या एक बूलियन वैरिएबल पर लौटने का कोई तरीका है?

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

इस वाक्य रचना कई सी-आधारित भाषाओं में मान्य है, लेकिन अजगर में अमान्य लगता है।

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

देशी अजगर neg() विधि एक पूर्णांक का निषेध, कोई बूलियन का निषेध वापस जाने के लिए लगता है: वहाँ एक और तरीका है का उपयोग कर के बिना यह करने के लिए है।

सहायता के लिए धन्यवाद।

उत्तर

85

आप ऐसा कर सकते हैं:

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 ओएमजी, कभी नहीं पता था कि यह संभव था, यह समझ में आता है लेकिन मैंने कभी इसके बारे में सोचा नहीं !! बहुत बढ़िया जवाब! (हालांकि 'बूल (1-ट्रू)' थोड़ा धीमा है तो 'सत्य नहीं') –

+0

संभव, हां। उपयोगी? कम संभावना! ऐसी कई बदसूरत चीजें हैं जो आप किसी भी भाषा के साथ कर सकते हैं, लेकिन यह ज्यादातर पाठकों के लिए बहुत भ्रमित है। शायद एक बहुत ही विशेष संदर्भ में यह समझ में आ सकता है ... – BuvinJ

संबंधित मुद्दे