2015-01-02 10 views
11

के साथ गैर-शून्य और अद्वितीय फ़ील्ड जोड़ें मेरे पास कुछ प्रविष्टियों वाले सर्वर में चल रहे मेरे ऐप में एक मॉडल है। मुझे SlugField जोड़ने की जरूरत है, इस मॉडल के लिए अद्वितीय और नल। SlugFieldtrading_name पर आधारित होगा। मैं इस नए क्षेत्र जोड़ने के लिए अपने मॉडल बदल गया है और विधि बचाने संशोधित किया: मॉडल बदलने के बादपहले से आबादी वाले मॉडल

class Supplier(StatusModel): 
    SLUG_MAX_LENGTH = 210 
    slug = models.SlugField(unique=True, max_length=SLUG_MAX_LENGTH) 
    trading_name = models.CharField(max_length=200, verbose_name=_('trading name')) 
    ... 

    def save(self, *args, **kwargs): 
     self.slug = orig = slugify(self.trading_name)[:Supplier.SLUG_MAX_LENGTH] 

     for x in itertools.count(1): 
      if not Supplier.objects.filter(slug=self.slug).exists(): 
       break 
      # Truncate the original slug dynamically. Minus 1 for the hyphen. 
      self.slug = "%s-%d" % (orig[:Supplier.SLUG_MAX_LENGTH - len(str(x)) - 1], x) 

     self.full_clean() 
     super(Supplier, self).save(*args, **kwargs) 

, मैं manage.py makemigrations चलाने के लिए और आउटपुट के रूप में इस प्रवास मिल गया है:

class Migration(migrations.Migration): 

    dependencies = [ 
     ('opti', '0003_auto_20141226_1755'), 
    ] 

    operations = [ 
     migrations.AddField(
      model_name='supplier', 
      name='slug', 
      field=models.SlugField(unique=True, default='', max_length=210), 
      preserve_default=False, 
     ), 
    ] 

मैं manage.py migrate नहीं चला सकता क्योंकि डिफ़ॉल्ट मान अद्वितीय कंसट्रेंट के कारण काम नहीं करेगा।

मेरा सवाल है: मैं Django 1.7 के साथ यह कैसे कर सकता हूं? मुझे स्कीमा परिवर्तन लागू करने और वर्तमान डेटाबेस को मेरे डेटाबेस में रखने की आवश्यकता है।

+1

पोस्ट अपने बनाया प्रवास इसलिए हम इसे – FrEaKmAn

+0

धन्यवाद बदल सकते हैं @FrEaKmAn - मैं जोड़ दिया है उचित विवरण :) – MatheusJardimB

उत्तर

14

Unfortunatelly देखते हैं, लेकिन मैं एक समाधान बना सकते हैं:

  • सबसे पहले मैंने एक माइग्रेशन बनाया है जो स्लग फ़ील्ड को शून्य करने की अनुमति देता है;
  • फिर मैंने एक और माइग्रेशन बनाया है जो मॉडल में प्रत्येक पंक्ति के लिए उचित मूल्यों के साथ स्लॉग कॉलम को पॉप्युलेट करता है;
  • फिर एक और माइग्रेशन जो स्तंभ में शून्य-बाधा को जोड़ता है।
+3

यह इस तरह दिखता है Django के सुझाव के रूप में अच्छी तरह से है - https://docs.djangoproject.com/en/ 1.9/howto/लेखन-माइग्रेशन/# माइग्रेशन-कि-एड-अद्वितीय क्षेत्रों – wasabigeek

2

आप कर अपने मॉडल में परिवर्तन (क्षेत्र, परिवर्तन, आदि जोड़ने), तो आप manage.py makemigrations तो आप जैसे कहते हैं, तो manage.py migrate

साथ माइग्रेशन लागू आप null=True के साथ मैदान में जोड़ सकते हैं, मैं कोई जवाब नहीं मिला एक स्क्रिप्ट यह एक समय

पॉप्युलेट करने के लिए अन्यथा, यदि आप क्षेत्र प्रवास के भीतर आप एक कस्टम एक लिख सकते हैं पॉप्युलेट करने बनाना, https://docs.djangoproject.com/en/1.7/ref/migration-operations/#writing-your-own

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