python Django 1.8 और syncdb/migrate के साथ Pers_user त्रुटि



buildout django-syncdb (8)

जब Django 1.8 में (zc.buildout के साथ) अपग्रेड किया जा रहा है और सिंकबॉक्स या माइग्रेट चल रहा है, तो मुझे यह संदेश मिलता है:

django.db.utils.ProgrammingError: relation "auth_user" does not exist

मेरे एक मॉडल में django.contrib.auth.models.User शामिल है:

user = models.ForeignKey(
    User, related_name='%(app_label)s_%(class)s_user',
    blank=True, null=True, editable=False
)

Django 1.7 में अपग्रेड करने से त्रुटि दूर हो जाती है। क्या मुझे Django 1.8 में उपयोगकर्ता ऑब्जेक्ट को अलग तरीके से शामिल करना है?


Answer #1

इस समस्या को ठीक करने के लिए मैंने यहाँ क्या किया:

1) अपने प्रोजेक्ट में OneToOneField, ForeignKey और ManyToManyFields जैसे सभी विदेशी प्रमुख रिलेशन फील्ड खोजें, जिसमें पुन: प्रयोज्य ऐप्स शामिल हैं, जो कि उपयोगकर्ता को संदर्भित कर रहे हैं। उपयोगकर्ता या उपयोगकर्ता को आयात करें और इसे ऊपर सेटिंग के रूप में सेट करें। auth.User । न्यूनतम उपयोग पर:

'auth.User'

2) उपरोक्त सभी मॉडलों के लिए, सुनिश्चित करें कि मॉडल में एक मान्य django माइग्रेशन है (दक्षिण नहीं)। यदि उनके पास दक्षिण प्रवासन है, तो निर्देशिका का नाम बदलकर migrations_south करें और फिर उसके लिए makemigrations कमांड चलाएं:

./manage.py makemigrations affected_app

कभी-कभी एक अलग नाम के तहत एक django माइग्रेशन फ़ोल्डर होता है, न कि डिफ़ॉल्ट migrations निर्देशिका। ऐसे मामलों में, अपनी सेटिंग में MIGRATION_MODULES माध्यम से इसे देखें:

MIGRATION_MODULES = {'filer': 'filer.migrations_django'}

चूंकि यह मुद्दा बड़ी परियोजनाओं पर खोजने के लिए कठिन था, इसलिए मैंने सेटिंग्स में सभी कस्टम ऐप्स INSTALLED_APPS से सेटिंग में और टेस्ट कमांड को चलाया, क्योंकि यह माइग्रेट चलेगा और आपके लिए डेटाबेस को फिर से बनाने की कोशिश करेगा:

./manage.py test

ऐसा लगता है कि यह मेरे लिए तय किया है। मुझे यकीन नहीं है कि चरण 1 अनिवार्य है या सिर्फ सबसे अच्छा अभ्यास है। लेकिन आपको ऐप्स को माइग्रेशन में बदलना ज़रूरी है।

चीयर्स!

पुनश्च। Django 1.9 में आने के लिए तैयार रहें। Syncdb कमांड को हटा दिया जाएगा। माइग्रेशन के बिना ऐप्स को सिंक करने की विरासत विधि को हटा दिया जाता है, और सभी ऐप के लिए माइग्रेशन अनिवार्य है।


Answer #2

यदि आप हेरोकू का उपयोग कर रहे हैं जैसे कि मुझे चलाया गया था

heroku run python manage.py makemigrations

यह संभवतः आपको एक संदेश देगा जो कह रहा है कि अब परिवर्तन हैं। उस पर ध्यान न दें

heroku run python manage.py migrate

यह आपको कुछ आउटपुट का सुझाव देगा जिससे कुछ किया गया है। अंत में चला

heroku run python manage.py createsuperuser

Answer #3

हो सकता है कि आपने इसका उत्तर ढूंढ लिया हो और समस्या का समाधान कर दिया हो, लेकिन मैं यह बताना चाहता था कि, मेरे मामले में, डेटाबेस को गिराकर और उपयोगकर्ताओं के पूर्ण विशेषाधिकारों के साथ इसे फिर से बनाकर उपरोक्त समस्या को हल किया गया था। मैं ऐसा करने में सक्षम था क्योंकि मैं एक गैर-उत्पादन वातावरण पर काम कर रहा हूं, लेकिन एक मंचन के माहौल पर ऐसा करना एक अच्छा विचार नहीं है, इसलिए सावधान रहें।

python 2.7.12 का उपयोग कर रहा python 2.7.12 और निम्नलिखित मेरे virtualenv के विनिर्देशों हैं:

Django==1.10.5
django-crispy-forms==1.6.1
django-registration-redux==1.4
djangorestframework==3.5.3
olefile==0.44
packaging==16.8
Pillow==4.0.0
psycopg2==2.6.2

Answer #4

इसका उपयोग करके उपयोगकर्ता को संदर्भित करने का प्रयास करें

from django.conf import settings
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='%(app_label)s_%(class)s_user', blank=True, null=True, editable=False)

Answer #5

यह समस्या सभी एप्लिकेशन के लिए "makemigrations" चलाकर सम्‍मिलित है, जो अभी तक माइग्रेट नहीं किए गए हैं, अर्थात ऐसे ऐप जिनके पास अभी तक उनके माइग्रेशन निर्देशिका में "initial_0001.py" फ़ाइल नहीं है।

यह किया जाता है (हमारे मामले में हम एक मेकफाइल का उपयोग करते हैं) इनमें से प्रत्येक ऐप के लिए चल रहे हैं:

manage.py makemigrations app_name

एक बार ऐसा हो जाने के बाद, आप निष्पादित कर सकते हैं:

manage.py migrate

हमेशा की तरह।

इसका अंतर्निहित कारण यह है कि किसी कारण से

manage.py makemigrations

यदि वे पहले से ही नहीं हैं तो हमेशा ये प्रारंभिक माइग्रेशन नहीं बनाते हैं। और जो उल्लेखित त्रुटि की ओर जाता है।

इसके विपरीत,

manage.py makemigrations app_name

हमेशा उन्हें बनाता है (यदि पहले से नहीं है)। दुर्भाग्य से मैं इस विषमता के कारणों की थाह नहीं लगा सकता।


Answer #6

अपने वातावरण पर, मैं उन सभी ऐप्स पर चल रहे makemigrations को ठीक करता हूं, makemigrations संबंध है:

manage.py makemigrations app_with_user_relation
manage.py migrate

Answer #7

मेरे पास भी यही मुद्दा था जिसे मैंने इनका उपयोग करके हल किया:

python manage.py migrate auth
python manage.py migrate

फिर माइग्रेट अपना काम करता है


Answer #8

मैंने एक पुरानी Django 1.6 परियोजना को Django 1.8 में माइग्रेट किया है और पहले हमने डेटाबेस को माइग्रेट करने के लिए syncdb का उपयोग किया है और हमारे प्रोजेक्ट में सभी ऐप्स के लिए प्रारंभिक माइग्रेशन चरण नहीं हैं । Django 1.8 के साथ, आपको एक कार्यशील डेटाबेस माइग्रेशन की आवश्यकता होगी। चल रहा है

manage.py makemigrations <app_name>

हमारे प्रॉजेक्ट के सभी ऐप्स के लिए हमारी समस्याएं तय हैं।





django-1.8