2011-09-27 8 views
7

मुझे लगता है कि जब मैं एक फार्म के माध्यम से एक स्ट्रिंग form field का कुछ भी नहीं डालने यह इसे रिक्त स्ट्रिंग '' के रूप में लिया गया।Django बातिल और रिक्त स्ट्रिंग

हालांकि जब मैं एक फॉर्म के माध्यम से एक पूर्णांक form field के कुछ भी नहीं डालता, तो यह इसे [null] के रूप में कैप्चर करता है।

क्या यह अच्छा अभ्यास है? क्या स्ट्रिंग null के साथ-साथ डीबी में भी होनी चाहिए?

उत्तर

5

यह अच्छा अभ्यास है। यदि तारों को null होने की अनुमति दी गई थी, तो खाली स्ट्रिंग रखने के दो तरीके होंगे: null और ""। यह आपको जांचने के लिए कई मान देता है, जो अक्षम और गन्दा है।

यह एक Django convention है, लेकिन सभी अनुप्रयोगों में अच्छा अभ्यास है, जब तक आप को null के लिए की जरूरत है कुछ अलग"" से मतलब है।

+7

यदि मेरे डेटाबेस में मैंने शून्य को आवंटित करने के लिए एक फ़ील्ड सेट किया है, तो मुझे उम्मीद है कि कोई भी नल के रूप में संग्रहीत नहीं किया जाएगा, खाली स्ट्रिंग नहीं। Django के लिए यह सम्मेलन होना ठीक है, लेकिन Django आवश्यक रूप से डेटाबेस तक पहुंचने वाली एकमात्र प्रणाली नहीं है। यदि एक अलग एप्लिकेशन NULL स्टोर कर सकता है तो आप अभी भी शून्य बनाम खाली स्ट्रिंग की जांच कर सकते हैं। हालांकि एक सरल 'यदि मूल्य नहीं है' दोनों पायथन में जांच करेंगे। – six8

+6

यह 'django अभ्यास' हो सकता है लेकिन सामान्य रूप से डेटाबेस में अनुपलब्ध डेटा का प्रतिनिधित्व करने के लिए खाली स्ट्रिंग का उपयोग करना खराब अभ्यास है। यही वह है जो न्यूल के लिए है। मैं वास्तव में चाहता हूं कि यह django में मानक अभ्यास नहीं था। – Darren

+0

यह एक अच्छा अभ्यास नहीं है, यह शुरुआती दिनों में पेश किया गया एक सम्मेलन है, टेम्पलेट्स में 'कोई नहीं' को संभालने के लिए नहीं और रिक्त फॉर्म फ़ील्ड को 'कोई नहीं' में साफ नहीं करना है। चीजें जल्दी से करने के लिए यह एक शॉर्टकट था, लेकिन हमें इसे एक अच्छा अभ्यास के रूप में उचित ठहराना चाहिए, क्योंकि यह आलस्य या समय की कमी थी जिसने हमें यह "अभ्यास" प्राप्त किया था। यही कारण है कि अब हमारे पास इस सामग्री को संभालने वाले 2 फ़ील्ड विशेषताएँ हैं। –

1

मुझे लगता है कि स्ट्रिंग बहुत शून्य होना चाहिए, लेकिन अपने आवेदन पर निर्भर करता है MySQL, better to insert NULL or empty string? देखते हैं।

आप, एक खाली क्षेत्र के लिए NULLs स्टोर प्रश्न में फील्ड के लिए null=True जोड़ना चाहते हैं। https://docs.djangoproject.com/en/dev/ref/models/fields/#null

+2

जो गलत है ... – zentenk

+0

यह गलत कैसे है? – six8

+2

मैं यह जानना पसंद करता हूं कि मान सेट किया गया था, भले ही मैं इसे एक खाली स्ट्रिंग पर सेट करता हूं जो सेट (शून्य) सेट नहीं करता है। यह निश्चित रूप से आपकी वरीयता और/या आवेदन पर निर्भर करता है। किसी भी मामले में, मैंने सर्वोत्तम अभ्यास की मेरी राय दी और Django के साथ इसे सक्षम करने के निर्देश दिए। – six8

0

यह field.empty_strings_allowed विशेषता पर निर्भर करता।

कुछ क्षेत्रों में यह False को अधिरोहित है। लेकिन CharField इसे True रखता है, इस प्रकार Field._get_default डिफ़ॉल्ट खाली स्ट्रिंग को डिफ़ॉल्ट रूप से लौटाता है - भले ही blank=True। डिफ़ॉल्ट रूप से None प्राप्त करने का एकमात्र तरीका फ़ील्ड पर null=True होना है।

तो तुम DB में क्षेत्र है कि रिक्त नहीं होना चाहिए और रिक्त स्थान के लिए कभी उदा वहाँ में डाल कभी नहीं करने की अनुमति नहीं है, तो objects.create। मॉडल save विधि में आपको self.full_clean() - या अन्य सत्यापन डालना होगा।

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