2015-05-15 4 views
17

जब मैं परीक्षण चलाने मैं डेटाबेस प्रारंभ के दौरान इस त्रुटि मिलती है:InvalidBasesError: के लिए ठिकानों को हल नहीं कर सकते [<ModelState: 'users.GroupProxy'>]

django.db.migrations.state.InvalidBasesError: Cannot resolve bases for [<ModelState: 'users.GroupProxy'>] 
This can happen if you are inheriting models from an app with migrations (e.g. contrib.auth) 

मैं करने के लिए contrib.auth समूह मॉडल के लिए इस प्रॉक्सी बनाया django व्यवस्थापक में इसे मेरे ऐप में रखें:

class GroupProxy(Group): 
    class Meta: 
     proxy = True 
     verbose_name = Group._meta.verbose_name 
     verbose_name_plural = Group._meta.verbose_name_plural 

तो मैं इस समस्या को ठीक करने के लिए क्या कर सकता हूं?

+0

@ डिमिट्री मिखायलोव क्या आपने इस मुद्दे को हल किया? मुझे प्रॉक्सी के सेट के लिए भी वही त्रुटि का सामना करना पड़ रहा है। अगर आप मेरी मदद कर सकते हैं तो मुझे खुशी होगी। – SpiXel

+0

मुझे पहले 'contrib.auth' के लिए माइग्रेशन चलाया गया था, यह अन्यथा काम नहीं करता था। –

+3

आपको इसमें एक खाली __init__.py के साथ माइग्रेशन फ़ोल्डर बनाने की आवश्यकता हो सकती है, इसलिए Django वास्तव में माइग्रेशन फ़ाइल बना सकता है। Tamriel http://stackoverflow.com/questions/27261030/migration-error-with-django-1-7-1 – Jesuisme

उत्तर

16

के बाद यह केवल एक चीज है कि मेरे लिए काम किया पर खुदाई का एक बहुत

comment out the offending apps, run migrations, then add them in again.

बस एक समाधान था, लेकिन उम्मीद है कि यह किसी को मदद मिलती है।

6

क्या आपने परीक्षण चलाने से पहले अपने ऐप पर manage.py makemigrations <app_label> चलाने का प्रयास किया है?

इसके अलावा, जांचें कि कौन सा मॉडल आप प्रॉक्सी की कोशिश कर रहे हैं, आपके INSTALLED_APPS में शामिल है।

+0

द्वारा जवाब देखें जब आप 'python manage.py test' चलाते हैं तो यह परीक्षण डीबी बनाने और लागू करने का प्रयास करेगा परीक्षण चलाने से पहले सभी माइग्रेशन। –

+0

मेरे पास पहले से ही एक डेटाबेस था, लेकिन माइग्रेशन फ़ाइलों को याद कर रहा था। मैंने ऐसा करने के बाद ('makemigrations '), मुझे त्रुटियां मिलीं कि' app_name.model_name तालिका पहले से मौजूद है' मैंने माइग्रेशन फ़ाइल ('ऐप/माइग्रेशन/0001_initial.py') संपादित करके इसे हल किया और प्रत्येक पंक्ति को टिप्पणी करते हुए 'संचालन = [...] 'सूची। – Keith

0

यदि यह केवल python manage.py test चलाते समय हो रहा है (शायद क्योंकि आप पहले से ही आवश्यक माइग्रेशन कर चुके हैं), तो आपको स्पष्ट रूप से कहना चाहिए कि contrib.auth को आपके सेटिंग्स मॉड्यूल के MIGRATION_MODULES में माइग्रेट नहीं करना चाहिए।

MIGRATION_MODULES(
     'auth': "contrib.auth.migrations_not_used_in_tests", 
) 
10

मैं इस मुद्दे का सामना करना पड़ा, और मॉडल बाहर टिप्पणी के रूप में नहीं वास्तव में एक समाधान है, मैं पता चला है कि मेटा वर्ग के लिए गैर-दस्तावेजी auto_created = True स्थापित करने Django इसे अनदेखा कर देगा।

class GroupProxy(Group): 

    class Meta: 
     proxy = True 
     auto_created = True 
+0

हालांकि उन ऐप्स के लिए अनुमतियां बनाते समय यह समस्याएं पैदा करेगा, इसलिए देखभाल के साथ इसका उपयोग करें – XelharK

+0

बिल्कुल काम नहीं किया। –

0

मेरे प्रॉक्सी मॉडल के समूह की मूल तालिका का नाम बदलने के बाद मुझे यह समस्या थी। मैंने इसे हल किया:

  1. माइग्रेशन फ़ाइल को हटाएं जिसमें मूल तालिका के लिए नाम बदल गया था।
  2. पोस्टग्रेस टर्मिनल का उपयोग करके, मैंने मूल तालिका को अपने पिछले नाम पर बदल दिया।
  3. फिर makemigrations और migrate Ran
4

आप अपने अनुप्रयोग की जड़ में एक migrations निर्देशिका (ताकि users/migrations/ अपने मामले में) बनाने और एक खाली __init__.py फ़ाइल आपकी समस्या का समाधान हो सकता है जोड़ने। कम से कम यह मेरे लिए किया जब मुझे एक ही त्रुटि मिल रही थी।

लेकिन आप अपने एप के लिए makemigrations चलाने से बेहतर हैं, जैसा ऊपर @zenofewords द्वारा सुझाया गया है। यह आपके लिए निर्देशिका बनाएगा और आपके प्रॉक्सी मॉडल के लिए माइग्रेशन उत्पन्न करेगा।

Why does Django create migration files for proxy models?

आपका परीक्षण उन माइग्रेशन के लिए देख रहे हैं और उन्हें नहीं मिल रहे हैं।

1

मुझे इस मुद्दे का सामना करना पड़ा (कुछ जटिल मॉडल विरासत करने के बाद)।मेरी माइग्रेशन में से एक

migrations.CreateModel(
    name='Offer', 
    fields=[ 
     # ... 
    ], 
    options={ 
     # ... 
    }, 
    bases=('shop.entity',), 
), 

मैं नष्ट कर दिया shop.Entity मॉडल पूरी तरह से निहित है, लेकिन प्रवास bases विशेषता में यह संदर्भित किया गया था। तो मैंने अभी bases=('shop.entity',) हटा दिया है और यह काम करता है। यह शायद शुरुआत से माइग्रेट करने का अवसर तोड़ देगा, लेकिन कम से कम आगे बढ़ने की अनुमति देता है।

एक और सलाह होगी: सीधे django कोड पर जाएं और निरीक्षण करें कि "आधार" समस्या क्या है। django/db/migrations/state.py पर जाएँ और एक ब्रेकपाइंट जोड़ें:

try: 
    bases = tuple(
     (apps.get_model(base) if isinstance(base, six.string_types) else base) 
     for base in self.bases 
    ) 
except LookupError: 
    print(self.bases) # <-- print the bases 
    import ipdb; ipdb.set_trace() # <-- debug here 
    raise InvalidBasesError("Cannot resolve one or more bases from %r" % (self.bases,)) 
0

'छोड़ने टेबल' और छोड़ने पूरे डेटाबेस मैं यह त्रुटि अपने आप को हल करने की कोशिश इस दोपहर के बहुमत खर्च करने के बाद, 'क्षुधा बाहर टिप्पणी' की हर कल्पनीय मिश्रण के माध्यम से जा रहा है, पाया कि मेरा मुद्दा 'माइग्रेशन' फ़ोल्डर की सरल कमी और कहा गया फ़ोल्डर के अंदर एक __ init__.py फ़ाइल के कारण हुआ था।

पुराने उत्तरों में से एक जो सही था अब अब सही नहीं है क्योंकि उन्होंने here का उल्लेख किया है।

'init.py' में उल्लिखित मॉडल वाली प्रत्येक निर्देशिका की जांच करें और इसे दूर जाना चाहिए।

शायद हर किसी के मामले को हल नहीं करेगा लेकिन इससे मेरी मदद मिली।

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