Django:(第三方)应用程序中的冲突模型

时间:2016-09-15 22:04:09

标签: django task-queue django-q

我将第三方应用程序集成到我的Django项目中,只有在我导入它时才会收到此错误消息。

PostgreSQL

我很困惑,因为我的应用程序运行良好,所以我不知道它是如何在我身边出错。我只是在最简单的用例中使用该应用程序。我的一般问题是:我该如何调查?

所以应用是django-q,一个任务队列(github)。我安装了它并按照最简单的用法调用它,遵循良好的文档。

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

api.py:

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 # 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) 没问题,直到我打电话给我的api并且它到达manage.py runserver。完整的堆栈跟踪:

tasks.async

我首先检查了我没有名为Task的模型,也没有安装我的django应用程序。我们没有。

我搜索了一个类似的pb并找到this SO answer,所以我试图调整django-q的导入,但没有成功(这并不意味着我做得不错)。

是圆形导入(SO hint)吗?

Django错误报告(其中没有)也很有趣,我发现comment 13特别是(关于sys.path中的双重条目和导入方式)。我的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'>. sys.path,所以我不会受评论13的说明影响;

我无法在新的django项目中重现这个问题;

我想尝试另一个排队系统:/ 关于可能出错的任何提示?

谢谢!

ps:我还可以指向我的完整回购

1 个答案:

答案 0 :(得分:0)

太糟糕了,我和huey一起去了。它简单而完整。

django-rq看起来也是一个很好的解决方案,与django仪表板集成。

相关问题