2009-06-24 6 views
3

Ich versuche, verschiedene Open-Source-Anwendungen in meinem Projekt zu verwenden. Problem ist, dass es denselben Modellnamen gibt, der von zwei verschiedenen Apps mit einer eigenen Modelldefinition verwendet wird.Django: Modellname Zusammenstoß

Ich habe versucht, mit:

class Meta: 
     db_table = "db_name" 

aber es hat nicht funktioniert. Ich bekomme immer noch einen Feldnamen-Überschneidungsfehler bei syncdb. Irgendwelche Vorschläge.

aktualisiert

ich eigentlich Satchmo mit Pinax zu integrieren versuchen. Und der Fehler ist:

Error: One or more models did not validate:

contact.contact: Accessor for field 'user' clashes with related m2m field 'User.contact_set'. Add a related_name argument to the definition for 'user'.

friends.contact: Accessor for m2m field 'users' clashes with related field User.contact_set'. Add a related_name argument to the definition for 'users'.

Sie haben Recht, Tabellennamen sind bereits eindeutig. Ich analysierte das Modell und das Modell "Kontakt" ist in zwei Modellen von zwei verschiedenen Apps. Wenn ich eines dieser Modelle ausdenke, funktioniert es gut.

Möglicherweise ist der Fehler vorhanden, weil beide Apps in PYTHON_PATH sind und wenn andere App das Modell mit demselben Namen definiert, tritt der Konflikt auf.

+2

Sicherlich sollten die App-Labels für die verschiedenen Apps das Risiko von Konflikten reduzieren. Kannst du mehr Details über den Fehler geben? –

+1

Yepp, db -Tabellen werden nach dem Muster " _ " benannt, daher ist ein Konflikt unwahrscheinlich. Zumindest sehe ich das auf PostgreSQL. Bitte geben Sie weitere Daten an, z. B. den tatsächlichen Ausgang des fehlgeschlagenen syncdb-Laufs. – Ber

+0

Haben Sie die Anwendung zweimal eingefügt? Zusätzlich zu der eigentlichen Fehlermeldung posten Sie bitte die Einstellung INSTALLED_APPS in Ihrer settings.py. –

Antwort

6

Das Problem ist, dass sowohl Satchmo als auch Pinax ein Kontaktmodell mit einem ForeignKey zu Benutzer haben. Django versucht, dem Benutzer für jedes dieser ForeignKeys das umgekehrte Beziehungsattribut "contact_set" hinzuzufügen, sodass es zu einem Konflikt kommt.

Die Lösung ist, etwas wie related_name = "pinax_contact_set" als ein Argument für die ForeignKey in Pinax Contact-Modell oder ähnlich im Satchmo Contact-Modell hinzuzufügen. Dazu muss die Quelle direkt für das eine oder andere bearbeitet werden. Sie können vielleicht einen Weg finden, dies über Monkeypatching zu tun, aber ich würde erwarten, dass das schwierig ist.

Verwandte Themen