2016-09-15 2 views
0

Ich integrierte eine Drittanbieter-App in mein Django-Projekt, und nur wenn ich es importiere, erhalte ich diese Fehlermeldung.Django: widersprüchliche Modelle in (Drittanbieter-) Anwendung

Ich bin verwirrt, weil meine App gut läuft, ohne dass es so ich frage mich, wie es ein Fehler auf meiner Seite sein könnte. Ich verwende die App nur in ihrem einfachsten Anwendungsfall. Meine allgemeine Frage lautet dann: Wie kann ich untersuchen?

So ist die App django-q, eine Aufgabenwarteschlange (github). Ich installierte es und nannte es in seiner einfachsten Verwendung, nach der guten Dokumentation.

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) 

Jetzt manage.py runserver ok, bis ich meine api nennen und erreicht tasks.async. Voll 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'>. 

ich zuerst überprüft, habe ich nicht ein Modell mit dem Namen Aufgabe, noch meine django installierten Anwendungen. Wir nicht.

Ich suchte nach einem ähnlichen pb und fand this SO answer, also versuchte ich, die Importe von django-q zu zwicken, ohne Erfolg (es bedeutet nicht, dass ich es richtig machte).

Ist es ein zirkulärer Import (SO hint)?

Ein Django Bug-Bericht (was nicht war) ist auch interessant, ich fand comment 13 particarly (über doppelte Einträge in sys.path und Importmöglichkeiten). Mein sys.path hat [ my_project, …/site_packages/django_q, …/site_packages/], also fühle ich mich nicht von Kommentar 13's Beschreibung beeinflusst;

Ich konnte das Problem nicht auf einem frischen Django-Projekt reproduzieren;

Ich habe Lust auf ein anderes Warteschlangensystem:/ Irgendwelche Hinweise darauf, was könnte falsch sein?

Danke!

ps: Ich konnte auch meine volle Repo-Punkt

+1

Versuchen Sie Ihr gesamtes '/ usr/local/lib/python2.7/dist-packages /' Verzeichnis oder wo auch immer Sie alle Ihre Python-Pakete installiert haben, nach einer Datei mit einem String 'class Task (', ich wette Da ist etwas da. – serg

+0

In der Tat, mein Vent war dreckig, ich habe zwei Pakete entfernt, die ich nicht verwende, ich habe temporär 'Fabric'-Klasse umbenannt, ich habe die' * pyc' gelöscht und versucht, aber keine Änderung. – Ehvince

Antwort

0

Schade, ging ich mit huey. Es ist einfach und vollständig.

django-rq sieht aus wie eine gute Lösung, mit einer Django-Dashboard-Integration.