Ich versuche, eine alte Django-App von 1.1.x auf 1.8 LTS zu aktualisieren, was das Aktualisieren von Pfaden beinhaltete, da ich Apps Apps umherbewege.Was ist der richtige Weg, verschachtelte Django-Apps in ManytoManyFields zu referenzieren
Aber ich bin nicht in der Lage Migrationen für eine App zu generieren, und ich kann nicht sehen, wie ein Namespaced App-Modell korrekt verweisen (vorausgesetzt, das ist das Problem)
Wenn ich Dateien von PROJECT verschoben haben/news/models zu PROJECT/site_name/news/models, wie soll ich diese Modelle in Fremdschlüsseln oder ManyToManyFields referenzieren?
Meine app
Ich habe eine projects
App Ich möchte für Migrationen machen. Projekte in some_org/projects
und in installierten Anwendungen aufgelistet, wie so:
INSTALLED_APPS = (
'some_org.maps',
'some_org.library',
'some_org.extras',
'some_org.news',
'some_org.projects',
'some_org.members',
'some_org.comments',
)
Alle Apps mit dem Namespace innerhalb des some_org
Verzeichnis.
Hier ist eine gekürzte Ansicht der Modelldatei in den Projekten App:
# some_org/projects/models.py
from some_org.library import Paper
class Project(models.Model):
name = models.CharField(max_length=30)
def get_children(self):
return ProjectPage.objects.filter(level=1, publish=True, project=self)
def has_library(self):
return Paper.objects.filter(projects=self).count() > 0
Aufruf ./manage.py makemigrations Bibliothek, gibt mir diese Fehlermeldung:
ValueError: Lookup failed for model referenced by field library.Paper.projects: projects.Project
Als ich in der Suche Papiermodell sieht so aus:
class Paper(models.Model):
# snip
# NewsLinkSubject, Projects et al used to in an app on
# the project root, like `./app_name/models.py`, but is now
# in `some_org/app_name/models.py`
subjects = models.ManyToManyField("news.NewsLinkSubject", blank=True)
projects = models.ManyToManyField("projects.Project", blank=True,)
country = models.ForeignKey("maps.Country", null=True, blank=True)
Ich frage mich zunächst, ob das Etikett für die App falsch ist, und versuchen, die Projekte ManyToMany Feld:
projects = models.ManyToManyField("some_org.projects.Project", blank=True,)
Dieser einen anderen Fehler gibt:
ERRORS:
library.Paper.subjects: (fields.E300) Field defines a relation with model some_org.projects.Project', which is either not installed, or is abstract.
Soweit ich die App sagen kann, ist installiert, und die Modelle sind nicht abstrakt.
Ich bin ziemlich ratlos - was mache ich falsch, und wie kann ich das beheben, damit ich Migrationen für diese Apps machen kann?
Ich verwende Django 1.8.17 und Python 2.7.13.
Warum würde das helfen? Wenn ich etwas wie './manage.py migrate --list library 'laufe, wird die Bibliotheksanwendung als' library 'erkannt - würde das Hinzufügen der app_label nicht redundant sein? –
Äh, weil es dein Problem lösen würde? –