2016-02-23 22 views
0

我試圖將多個應用程序分組到一個「應用程序」文件夾以更好地管理。但是當我做第一次遷移時,我得到了下面的錯誤。django1.9 - Makemigration錯誤:應用程序標籤有額外的「點」

./manage.py makemigrations 

Traceback (most recent call last): 
    File "./manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line 
    utility.execute() 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/core/management/__init__.py", line 342, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/core/management/base.py", line 399, in execute 
    output = self.handle(*args, **options) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/core/management/commands/makemigrations.py", line 132, in handle 
    migration_name=self.migration_name, 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/migrations/autodetector.py", line 45, in changes 
    changes = self._detect_changes(convert_apps, graph) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/migrations/autodetector.py", line 128, in _detect_changes 
    self.old_apps = self.from_state.concrete_apps 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/migrations/state.py", line 166, in concrete_apps 
    self.apps = StateApps(self.real_apps, self.models, ignore_swappable=True) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/migrations/state.py", line 228, in __init__ 
    self.render_multiple(list(models.values()) + self.real_models) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/migrations/state.py", line 296, in render_multiple 
    model.render(self) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/migrations/state.py", line 585, in render 
    body, 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/models/base.py", line 158, in __new__ 
    new_class.add_to_class(obj_name, obj) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/models/base.py", line 299, in add_to_class 
    value.contribute_to_class(cls, name) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/models/fields/related.py", line 702, in contribute_to_class 
    super(ForeignObject, self).contribute_to_class(cls, name, virtual_only=virtual_only) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/models/fields/related.py", line 308, in contribute_to_class 
    lazy_related_operation(resolve_related_class, cls, self.remote_field.model, field=self) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/models/fields/related.py", line 85, in lazy_related_operation 
    return apps.lazy_model_operation(partial(function, **kwargs), *model_keys) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/models/fields/related.py", line 83, in <genexpr> 
    model_keys = (make_model_tuple(m) for m in models) 
    File "/Users/reonard/.virtualenvs/django-ito/lib/python2.7/site-packages/django/db/models/utils.py", line 14, in make_model_tuple 
    app_label, model_name = model.split(".") 
ValueError: too many values to unpack 

我添加了分裂模型中的print語句輸出功率爲:

auth.User 
auth.Group_permissions 
auth.User_groups 
auth.User_user_permissions 
app.ticketmgr.BasePriority 

看來,「app.ticketmgr.BasePriority」有一個額外的「點」。其實應用程序名稱是「ticketmgr」,但放在一個「應用程序」文件夾更好的管理。我可否知道我應該怎樣做才能使遷移工作?是否有任何額外的設置應該支持將應用程序放在「應用程序」文件夾中? 下面是我的應用程序文件夾,裏面有2個應用程序(comm,ticketmgr)。

|____app 
| |______init__.py 
| |____comm 
| | |______init__.py 
| | |____admin.py 
| | |____apps.py 
| | |____migrations 
| | | |______init__.py 
| | |____models.py 
| | |____role_required.py 
| | |____tests.py 
| | |____views.py 
| |____ticketmgr 
| | |______init__.py 
| | |____admin.py 
| | |____apps.py 
| | |____forms.py 
| | |____migrations 
| | | |____0001_initial.py 
| | | |______init__.py 
| | |____models.py 
| | |____tests.py 
| | |____views.py 
+0

您的INSTALLED_APPS? –

+0

嗨,這裏是我的INSTALLED_APPS:INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 「的Django .contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', 'app.comm', 'app.ticketmgr', ] – jim

回答

1

沒有更多的需要。只需將"app.ticketmgr", "app.comm"添加到INSTALLED_APPS即可。

+0

是的,我這樣做了,但不起作用。這個問題看起來是由'app_label,model_name = model.split(「。」)'將app.ticketmgr.BasePriority'分成3個值而不是2造成的。該項目在我使用django default創建應用程序時起作用。但是當我將應用程序移動到「應用程序」文件夾時,它看起來模型標籤「app.ticketmgr.BasePriority」有額外的前綴「app.」並導致錯誤。 – jim

+0

嗨,你是對的,沒有什麼需要了。我通過刪除每個應用程序的「遷移」文件夾中的所有遷移文件來解決此問題,現在它可以工作。感謝您的意見。 – jim

0

BasePriority不會出現在您的項目目錄中。也許這是一個模型?

已安裝的應用線應該是:

app.ticketmgr 

由於BasePriority不存在,得到的django 3個參數,而不是爲app_label所需的2,模型名稱。 「BasePriority」是第三個參數,除此之外。

+0

謝謝。是的,BasePriority是'comm.models'中定義的模型之一 – jim

+0

它是在comm或ticktmgr?您將它打印爲app.ticktmgr –

+0

它在開始時位於ticketmgr中,但我稍後將它移動到了通訊區。之後,我做了一次遷移,並得到了錯誤。我通過刪除所有舊遷移文件並再次進行遷移來解決此問題。現在一切正常。 – jim