7

मैं माइग्रेशन वाले ऐप के लिए Field.db_index का उपयोग करके मॉडल फ़ील्ड पर इंडेक्स जोड़ने की कोशिश कर रहा हूं। Django's documentation सब मैं क्या करने की जरूरत को देखते हुए db_index=True स्थापित करने के लिए है:माइग्रेशन के साथ Django में मॉडल फ़ील्ड्स में इंडेक्स जोड़ना

class Person(models.Model): 
    first_name = models.CharField() 
    last_name = models.CharField(db_index=True) 

और उसके बाद मैं पहली बार नई Django के प्रवासन की कोशिश की:

./manage.py makemigrations app-name 

लेकिन प्रवासन परिवर्तन की सूचना नहीं लगता है और नहीं जोड़ता है एक सूचकांक बनाने के लिए एसक्यूएल कमांड। इसलिए मैं django-admin.py की कोशिश की के रूप में समझाया here:

django-admin.py sqlindexes app-name 

लेकिन है कि या तो एसक्यूएल आदेश मुद्रित नहीं करता है और यह निम्न त्रुटि के साथ बाहर निकल जाता है:

CommandError: App 'app-name' has migrations. Only the sqlmigrate and sqlflush commands can be used when an app has migrations. 

उत्तर

5

ठीक है, मैं Meta.index_together का उपयोग कर अनुक्रमणिका बनाने में कामयाब रहे। यह स्पष्ट तरीका नहीं है, के बाद से मैं वास्तव में एक साथ कई क्षेत्रों का अनुक्रमण नहीं कर रहा हूँ, लेकिन यह makemigrations साथ काम करता है:

class Person(models.Model): 
    class Meta(): 
     index_together = [['last_name']] 
    first_name = models.CharField() 
    last_name = models.CharField() 

अब makemigrations एक नया माइग्रेशन पड़ता है:

./manage.py makemigrations app-name 

>>Migrations for 'app-name': 
>> 0005_auto_20140929_1540.py: 
>> - Alter index_together for Person (1 constraint(s)) 

और इसी एसक्यूएल आदेश है वास्तव में CREATE INDEX

./manage.py sqlmigrate app-name 0005_auto_20140929_1540 

>>BEGIN; 
>>CREATE INDEX app-name_person_last_name_7...4_idx ON `app-name_person` (`last_name`); 
>>COMMIT; 
संबंधित मुद्दे