यह न प्रपत्र स्तर पर मॉडल स्तर पर इस को हल करने के लिए महत्वपूर्ण है कि कर देगा, डेटा के बाद से आयात स्क्रिप्ट के माध्यम से, शैल इत्यादि के माध्यम से एपीआई के माध्यम से प्रवेश कर सकते हैं। Charfield पर null=True
सेट करने का नकारात्मक हिस्सा यह है कि कॉलम खाली तारों और एनयूएलएल दोनों के साथ समाप्त हो सकता है, जो थोड़ा अस्पष्ट है लेकिन आम तौर पर मेरे अनुभव में कोई समस्या नहीं है। यदि आप उस अस्पष्टता के साथ जीने के इच्छुक हैं, तो यहां कुछ चरणों में इसे कैसे करें:
1) फ़ील्ड पर null=True, blank=True
सेट करें और परिवर्तन में माइग्रेट करें।
2) इतना है कि सभी मौजूदा रिक्त स्ट्रिंग NULLs में बदल दिया जाता अपने डेटा की मालिश:
def save(self, *args, **kwargs):
# Empty strings are not unique, but we can save multiple NULLs
if not self.somefield:
self.somefield = None
super().save(*args, **kwargs) # Python3-style super()
4) पर unique=True
सेट करें:
items = Foo.objects.all()
for item in items:
if not item.somefield:
item.somefield = None
item.save()
3) अपने मॉडल के लिए एक कस्टम save()
विधि जोड़ें क्षेत्र और साथ ही माइग्रेट भी।
अब आप somefield
को खाली या एक अद्वितीय मूल्य के रूप में स्टोर करने में सक्षम होंगे चाहे आप व्यवस्थापक या किसी अन्य डेटा प्रविष्टि विधि का उपयोग कर रहे हों।
आप कई माइग्रेशन देखना पसंद नहीं करते हैं, तो यहां एक भी प्रवास में ऐसा करने का एक उदाहरण है:
from __future__ import unicode_literals
from django.db import migrations, models
def set_nulls(apps, schema_editor):
Event = apps.get_model("events", "Event")
events = Event.objects.all()
for e in events:
if not e.wdid:
e.wdid = None
e.save()
class Migration(migrations.Migration):
dependencies = [
('events', '0008_something'),
]
operations = [
migrations.AlterField(
model_name='event',
name='wdid',
field=models.CharField(blank=True, max_length=32, null=True),
),
migrations.RunPython(set_nulls),
migrations.AlterField(
model_name='event',
name='wdid',
field=models.CharField(blank=True, max_length=32, null=True, unique=True),
),
]
मैंने ट्विटर_आईडी फ़ील्ड को हटा दिया और फिर इसे दक्षिण का उपयोग करने में फिर से जोड़ा।यह मुझे कोई समस्या नहीं दिए बिना ठीक काम कर रहा है – noahandthewhale
Django खाली स्ट्रिंग '' 'के रूप में रिक्त फ़ील्ड का इलाज कर रहा है, और' अद्वितीय = True' एकाधिक प्रविष्टियों को मान '' ''' 'के साथ अनुमति नहीं देता है। हालांकि यह 'twitter_id = none'' के साथ कई प्रविष्टियों की अनुमति देगा। – Alasdair