2009-10-16 32 views
23

को देखते हुए निम्नलिखित मॉडल, मैं (अनुक्रम, शेयर) अनुक्रमित करना चाहते हैं क्षेत्रोंDjango: बनाने के सूचकांक: गैर-अद्वितीय, कई स्तंभ

class QuoteModel(models.Model): 
    quotedate = models.DateField() 
    high = models.FloatField() #(9,2) DEFAULT NULL, 
    low = models.FloatField() #(9,2) DEFAULT NULL, 
    close = models.FloatField() #(9,2) DEFAULT NULL, 
    closeadj = models.FloatField() #(9,2) DEFAULT NULL, 
    volume = models.IntegerField() #(9,2) DEFAULT NULL, 
    stock = models.IntegerField(db_index=True) #(9,2) DEFAULT NULL, 
    open = models.FloatField() #(9,2) DEFAULT NULL, 
    sequence = models.IntegerField() #(9,2) DEFAULT NULL, 

यह सूचकांक में गैर-अद्वितीय होना चाहिए - mysql में यह होना चाहिए कुछ की तरह:

create index ndx_1 on model_quotemodel(sequence,stock); 

केवल Django वैकल्पिक हल मुझे पता है की एक "एसक्यूएल" फ़ाइल है कि तालिका निर्माण पर Django द्वारा निष्पादित किया जाएगा पैदा कर रही है। तो, मैं एक "stockmodel.sql" निम्न क्वेरी (ऊपर :)

create index ndx_1 on model_quotemodel(sequence,stock); 

के रूप में ही देखते यह कर के किसी भी "स्वच्छ" रास्ता है युक्त बनाया?

उत्तर

13

Django 1.5 के रूप में, आप उपयोग कर सकते हैं Meta.index_together option:

class QuoteModel(models.Model): 
    # ... fields ... 

    class Meta: 
     index_together = [ 
      ("sequence", "stock"), 
     ] 

(ध्यान दें: 2009 से मूल जवाब ने कहा कि यह सूचकांक एक से अधिक क्षेत्रों के लिए संभव नहीं था, यह बाद से बदल दिया गया है)

+2

मुझे यकीन है कि अगर यह जवाब वास्तव में गैर-प्राथमिक कुंजी समग्र कुंजी के पते नहीं कर रहा हूँ Django में index_together है? ऐसा प्रतीत नहीं होता है। –

+2

यह वही नहीं है जो प्रश्न ढूंढ रहा है। गैर-अद्वितीय, गैर-प्राथमिक, समग्र कुंजी की आवश्यकता है। – Fydo

+0

मुझे नहीं लगता कि उपर्युक्त टिप्पणियां वर्तमान उत्तर से प्रासंगिक हैं ... ऐसा लगता है कि 'index_together' _does_ गैर-अद्वितीय, गैर-प्राथमिक समग्र सूचकांक – Anentropic

9

unique_together जो हो सकता है वह हो सकता है। बस इसे अपने मॉडल के अंदर अपने Meta कक्षा में रखें।

+1

प्रदान क्यों किया गया है, मुझे क्यों वोट दिया गया है? क्या गलत है? – craesh

+5

उसने index_together के लिए पूछा। तुमने उसे अनोखा बताया। उसने क्या नहीं पूछा। –

+0

ठीक है, मुझे लगता है, खेद है – craesh

15

, आप आसानी से एक समग्र कुंजी के रूप में इस जोड़ सकते हैं अगर आप South उपयोग कर रहे हैं स्वीकार किए जाते हैं जवाब से पर का पालन करने के लिए, .py schemamigration your_app_name name_for_migration --add-index ModelName.first_field_in_index

तब आप जनरेट किए गए माइग्रेशन को संपादित कर सकते हैं एक फ़ील्ड में अतिरिक्त फ़ील्ड जोड़ने के लिए फ़ाइल (आप देखेंगे कि यह सिर्फ फ़ील्ड नामों की एक सूची है जो आवश्यक है)।

रिवर्स माइग्रेशन के साथ-साथ आगे बढ़ने के लिए भी मत भूलना।

+0

ब्रावो। धन्यवाद! –

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