django r11710 und models in Verzeichnis...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich hab mit http://code.djangoproject.com/changeset/11710 ein Problem. Bei syncdb kommt sowas:
Error: One or more models did not validate:
django_test.article: 'publications' has a manually-defined m2m relation through model Article_publications, which does not have foreign keys to Publication and Article
Ich hab mal eine kleine Test app gebaut. Das Problem kommt dann auf, wenn man die models.py in einem Verzeichnis aufteilt.
Es sieht dann so aus:

./models/article.py

Code: Alles auswählen

from django.db import models

class Article(models.Model):
    headline = models.CharField(max_length=100)
    publications = models.ManyToManyField("Publication", null=True, blank=True,)
    class Meta:
        app_label = 'django_test'

./models/publication.py

Code: Alles auswählen

from django.db import models

class Publication(models.Model):
    title = models.CharField(max_length=30)

    class Meta:
        app_label = 'django_test'

./models/__init__.py

Code: Alles auswählen

from article import Article
from publication import Publication
Hab ich irgendwas vergessen oder ist das ein Bug in django???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

jens hat geschrieben:

Code: Alles auswählen

from article import Article
from publication import Publication
!=

Code: Alles auswählen

from publication import Publication
from article import Article
Aber warum kickst du die blöden Strings nicht weg und verwendest echte Models?

Wäre zumindest nen Versuch wert ;)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ja, stimmt. Bei dem kleinen Beispiel ist es mit der anderen import Reihenfolge getan.

In PyLucid scheint aber die Reihenfolge egal zu sein, es gibt immer den Fehler:

Code: Alles auswählen

Error: One or more models did not validate:
pylucid.design: 'headfiles' has a manually-defined m2m relation through model Design_headfiles, which does not have foreign keys to EditableHtmlHeadFile and Design
Der Fehler kommt mit django r11709 nicht.
apollo13 hat geschrieben:Aber warum kickst du die blöden Strings nicht weg und verwendest echte Models?
Was meinst du damit? Die django "Erleichterung" statt der echten Model-Klasse, diese nur per Namen als String an zu geben?

Das geht in dem kleinen Mini Beispiel. In PyLucid hab ich aber schnell import-loops, weil die Modelle mehr verzahnt sind... Allerdings sind die Models so umfangreich geworden, das es Sinn macht diese Aufzuteilen... Siehe: http://trac.pylucid.net/browser/branche ... id/models/

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

jens hat geschrieben:Der Fehler kommt mit django r11709 nicht.
Mag sein, aber imho war deine Variante ansich unsupported; vlt solltest du dir hier Feedback von jacob holen. Von daher ist es wahrscheinlich kein Bug, deine Art der Verwendung ist auch nirgendwo dokumentiert; es steht in den Docs extra, dass du "appname.Modelname" verwenden sollst (von "self" mal abgesehen).
Das geht in dem kleinen Mini Beispiel. In PyLucid hab ich aber schnell import-loops, weil die Modelle mehr verzahnt sind... Allerdings sind die Models so umfangreich geworden, das es Sinn macht diese Aufzuteilen... Siehe: http://trac.pylucid.net/browser/branche ... id/models/
Jupp das ist oft blöd, aber zumeist kann man es durch etwas umstrukturieren umgehen…
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

apollo13 hat geschrieben:es steht in den Docs extra, dass du "appname.Modelname" verwenden sollst (von "self" mal abgesehen).
Da kann ich dir nicht ganz folgen. Was meinst du damit genau?

EDIT: Ah: Ich hab's statt:

Code: Alles auswählen

headfiles = models.ManyToManyField("EditableHtmlHeadFile")
muß auch dort der App-Name rein:

Code: Alles auswählen

headfiles = models.ManyToManyField("pylucid.EditableHtmlHeadFile")
Dann geht's...

Dann ist aber IMHO die Fehlermeldung von django sehr irreführend, oder nicht?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also alle M2M innerhalb meine App funktionieren nun... Ich hab allerdings auch ein M2M zu django.contrib.sites.models.Site und die M2M-Tabelle erstellt django nicht. Egal ob ich direkt das Site Model als Objekt als String "sites.Site" übergebe.

Das ganze funktioniert auch nicht in der kleinen mini test app...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich hab mal Ticket http://code.djangoproject.com/ticket/12168 eröffnet und ein Test angehängt... Bei dem Test sieht man, das die M2M Tabellen nicht erzeugt werden...

Was mich allerdings wundert: Warum scheine ich der einzige dieses Problem zu haben? Haben alle django User die models nicht als Package oder nutzten die nicht die aktuelle trunk Version?
Was eigentlich nahe liegender ist: Ich übersehe irgendwas...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ah! Es war doch nicht mein Fehler. Ist mit http://code.djangoproject.com/changeset/11724 behoben.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten