2016-09-15 78 views
0

我將第三方應用程序集成到我的Django項目中,只有當我導入它時,纔會收到此錯誤消息。Django:(第三方)應用程序中的衝突模型

RuntimeError: Conflicting 'task' models in application 'django_q': <class 'django_q.models.Task'> and <class 'models.Task'>. 

我很困惑,因爲我的應用程序運行良好沒有它,所以我不知道它是如何可能是我身邊的錯誤。我只在最簡單的用例中使用該應用程序。那麼我的一般問題是:我該如何調查?

所以應用程序是django-q,一個任務隊列(github)。我安裝了它,並按照其最簡單的用法進行了調用,遵循良好的文檔。

CACHE = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 
     'LOCATION': 'cache_table', 
    } 
} 

Q_CLUSTER = { 
    'name': 'DjangORM_queue', 
    'workers': 4, 
    'timeout': 3600, 
    'retry': 4000, 
    # 'queue_limit': 50, 
    # 'bulk': 10, 
    'orm': 'default' 
} 

api.py:

# api.py 
# not putting all imports or __init__.py 
def myhook(task): 
    print task.result 
    import ipdb; ipdb.set_trace() 

def mymethod(request, pk, **kwargs): 
    from django_q.tasks import async, result 
    async('models.MyModel.method', pk, hook='myhook', sync=True) 

現在manage.py runserver是好的,直到我把我的API,並達到tasks.async。 Full stacktrace:

Traceback (most recent call last): 
    File "/home/[...]/django/core/handlers/base.py", line 132, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/home/.../my-project/searchapp/models/api.py", line 965, in mymethod 
    tasks.async('models.MyModel.mymethod', pk, hook='myhook', sync=True) 
    File "/home/[...]/django_q/tasks.py", line 43, in async 
    return _sync(pack) 
    File "/home/[...]/django_q/tasks.py", line 176, in _sync 
    cluster.worker(task_queue, result_queue, Value('f', -1)) 
    File "/home/[...]/django_q/cluster.py", line 369, in worker 
    m = importlib.import_module(module) 
    File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
    File "/home/[...]/django_q/models.py", line 15, in <module> 
    class Task(models.Model): 
    File "/home/[...]/django/db/models/base.py", line 309, in __new__ 
    new_class._meta.apps.register_model(new_class._meta.app_label, new_class) 
    File "/home/[...]/django/apps/registry.py", line 221, in register_model 
    (model_name, app_label, app_models[model_name], model)) 
RuntimeError: Conflicting 'task' models in application 'django_q': <class 'django_q.models.Task'> and <class 'models.Task'>. 

我第一次檢查我沒有一個名爲Task的模型,我的django也沒有安裝應用程序。我們沒有。

我搜索了一個類似的pb,發現this SO answer,所以我試圖調整django-q的進口,但沒有成功(但這並不意味着我做對了)。

是否爲循環導入(SO hint)?

一個Django bug報告(這不是)也很有趣,我發現了comment 13 particarly(關於sys.path中的重複條目和導入方式)。我的sys.path[ my_project, …/site_packages/django_q, …/site_packages/],所以我不覺得受評論13的描述影響;

我無法在新鮮的django項目上重現此問題;

我想嘗試其他排隊系統:/ 任何提示可能是錯誤的?

謝謝!

PS:我還可以指出我的全部回購

+1

嘗試搜索您的整個'/ usr/local/lib/python2.7/dist-packages /'dir,或者安裝了所有python軟件包的地方,查找包含字符串'class Task'的文件(' – serg

+0

確實有,我的房間很髒,我去掉了兩個我沒有使用的包,我臨時性地改名爲'布料類',我刪除了* pyc'並重試,但沒有改變。 – Ehvince

回答

0

太糟糕了,我去huey。它簡單而完整。

django-rq看起來像一個很好的解決方案,與django儀表板集成。

相關問題