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
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
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