2013-09-03 8 views
7

इम मेरी Django मॉडल की ओर पलायन करने की कोशिश कर विफल रहता है।Django विस्थापित मॉडल

यहाँ है माइग्रेशन Django बनाता है:

# encoding: utf8 
from django.db import models, migrations 


class Migration(migrations.Migration): 

    dependencies = [('articles', '0002_auto')] 

    operations = [ 
     migrations.AddField(
      field = models.ForeignKey(to_field=u'id', to=u'auth.User', blank=True, null=True), 
      name = 'author', 
      model_name = 'post', 
     ), 
    ] 

यहाँ मेरी ट्रैस है जब मैं ./manage.py विस्थापित चलाने का प्रयास:

Operations to perform: 
    Synchronize unmigrated apps: ckeditor, sessions, admin, messages, auth, staticfiles, contenttypes, django_extensions 
    Apply all migrations: articles 
Synchronizing apps without migrations: 
    Creating tables... 
    Installing custom SQL... 
    Installing indexes... 
Installed 0 object(s) from 0 fixture(s) 
Running migrations: 
    Applying articles.0002_post_author...Traceback (most recent call last): 
    File "./manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/core/management/__init__.py", line 397, in execute_from_command_line 
    utility.execute() 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/core/management/__init__.py", line 390, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/core/management/base.py", line 242, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/core/management/base.py", line 289, in execute 
    output = self.handle(*args, **options) 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/core/management/commands/migrate.py", line 116, in handle 
    executor.migrate(targets, plan, fake=options.get("fake", False)) 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/db/migrations/executor.py", line 60, in migrate 
    self.apply_migration(migration, fake=fake) 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/db/migrations/executor.py", line 73, in apply_migration 
    migration.apply(project_state, schema_editor) 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/db/migrations/migration.py", line 80, in apply 
    operation.database_forwards(self.app_label, schema_editor, project_state, new_state) 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/db/migrations/operations/fields.py", line 22, in database_forwards 
    schema_editor.add_field(from_model, to_model._meta.get_field_by_name(self.name)[0]) 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/db/backends/schema.py", line 349, in add_field 
    definition, params = self.column_sql(model, field, include_default=True) 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/db/backends/schema.py", line 105, in column_sql 
    db_params = field.db_parameters(connection=self.connection) 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/db/models/fields/related.py", line 1285, in db_parameters 
    return {"type": self.db_type(connection), "check": []} 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/db/models/fields/related.py", line 1276, in db_type 
    rel_field = self.related_field 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/db/models/fields/related.py", line 1183, in related_field 
    return self.foreign_related_fields[0] 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/db/models/fields/related.py", line 971, in foreign_related_fields 
    return tuple(rhs_field for lhs_field, rhs_field in self.related_fields) 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/db/models/fields/related.py", line 958, in related_fields 
    self._related_fields = self.resolve_related_fields() 
    File "/home/USER/.virtualenvs/PROJECT/src/django-trunk/django/db/models/fields/related.py", line 943, in resolve_related_fields 
    raise ValueError('Related model %r cannot been resolved' % self.rel.to) 
ValueError: Related model u'auth.User' cannot been resolved 

किसी को भी पता है कि मैं गलत क्या कर रही हूं?

+0

क्या आपके पास यह कोई भाग्य है? – Andrei

+1

उपरोक्त कोड Django 1.7 अल्फा से है। मुझे Django 1.7 अल्फा में अंतर्निहित माइग्रेशन का उपयोग करने के बजाय बस Django 1.6.1 और दक्षिण के साथ चिपकना आसान लगता है। –

उत्तर

0

यदि आप कस्टम उपयोगकर्ता मॉडल का उपयोग नहीं कर रहे हैं, तो शायद यह आपकी समस्या नहीं है, लेकिन हमेशा get_user_model() या उपयोगकर्ता वर्ग का संदर्भ देने के दौरान याद रखें। इसके अलावा, जब एक विदेशी कुंजी, settings.AUTH_USER_MODEL काम करता है, भी, को परिभाषित करने में के रूप में:

class MyModel(models.Model): 
    person = models.ForeignKey(settings.AUTH_USER_MODEL) 
3

क्या इस स्थिति में मुझे मदद मिली:

  1. (__init__.py को छोड़कर सभी माइग्रेशन फ़ाइलें हटाएँ /% prjname%/माइग्रेशन फ़ोल्डर)
  2. python manage.py makemigrations
  3. python manage.py migrate

सटीक कारण के बारे में निश्चित नहीं है, लेकिन मैंने अपने कोड-पार्टनर द्वारा जेनरेट की गई फ़ाइलों का उपयोग करने की कोशिश की और यह काम नहीं कर सका।

1

ठीक है, यह Django की एक और मजेदार विशेषता है जिसने मुझे इसे समझने के लिए घंटों का खर्च किया। https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#substituting-a-custom-user-model के अनुसार:

swappable मॉडल के लिए Django के गतिशील निर्भरता सुविधा की सीमाओं के कारण, आप सुनिश्चित करना चाहिए कि मॉडल AUTH_USER_MODEL द्वारा संदर्भित अपने अनुप्रयोग के प्रथम प्रवास में बन जाता है (आम तौर पर 0001_initial कहा जाता है); अन्यथा, आप निर्भरता मुद्दों पर होगा।

इसलिए इस समस्या को हल करने के लिए 0001_initial.py में अपना कस्टम उपयोगकर्ता मॉडल निर्माण करना सबसे अच्छा "साफ" तरीका है और यह बस काम करेगा। और यही वास्तविक कारण है कि Lebedev Sergey की डिलीट/मेकमिग्रेशन चाल काम कर सकती है।

+1

शायद वास्तव में इसे पूरा करने के तरीके का एक छोटा कोड उदाहरण प्रदान करें। अन्यथा, आपके पहले जवाब पर बधाई! – theWanderer4865

0

यदि आप किसी अन्य माइग्रेशन को लागू करने के बाद यह परिवर्तन करते हैं, तो आपको माइग्रेशन फ़ोल्डर में बाकी सब कुछ हटाना होगा और फिर "python manage.py makemigrations" चलाएं। फिर जो भी आपने AUTH_USER_MODEL के लिए उपयोग किया था वह आपका पहला माइग्रेशन होगा।