2009-08-04 17 views
3

Ich habe ein Modell bekam, der so aussieht,Django ManyToMany Beziehung add() Fehler

class PL(models.Model): 
    locid = models.AutoField(primary_key=True) 
    mentionedby = models.ManyToManyField(PRT) 

class PRT(models.Model): 
    tid = .. 

Der resultierende viele zu viele Tabelle in mysql gebildet wie

+------------------+------------+------+-----+---------+----------------+ 
| Field   | Type  | Null | Key | Default | Extra   | 
+------------------+------------+------+-----+---------+----------------+ 
| id    | int(11) | NO | PRI | NULL | auto_increment | 
| PL_id   | int(11) | NO | MUL | NULL |    | 
| PRT_id   | bigint(64) | NO | MUL | NULL |    | 
+------------------+------------+------+-----+---------+----------------+ 

Nun, wenn pl ist ein Ziel von PL und prt dass von PRT, dann

pl.mentionedby.add(prt) 

tun gibt mir einen Fehler

Falscher ganzzahliger Wert: 'PRT Objekt' für Spalte 'prt_id' in Zeile 1"

während

pl.mentionedby.add(prt.tid) 

funktioniert gut - mit einer Einschränkung.

Ich kann alle Elemente in pl.mentionedby.all() sehen, aber ich kann nicht zu einem erwähnten PRT-Objekt gehen und siehe prt.mentionedby_set.all().

Weiß jemand, warum das passiert? Was ist der beste Weg, um es zu beheben?

Danke!

Antwort

0

Sind das die kompletten Modelle? Ich kann nur annehmen, dass irgendwo etwas außer Kraft gesetzt wurde, was wahrscheinlich nicht hätte sein dürfen.

Können Sie den vollständigen Code veröffentlichen?

+0

Hey Mez - das sind fast die kompletten Modelle. Die anderen Felder sind nur ein Name und eine Kategorie (beide vom Typ text/varchar), also bin ich mir nicht sicher, was Sie meinen, wenn Sie etwas überschreiben. – viksit

6

Das Hinzufügen von prt direkt sollte beim ersten Versuch funktionieren. Wie erhalten Sie pl und prt? Angenommen, Sie haben einige Daten in Ihrer Datenbank, versuchen Sie diese Befehle von der Django-Shell und sehen Sie, ob es funktioniert. Es scheint einige fehlende Informationen aus der Frage zu geben. Nach dem Lauf python manage.py shell:

from yourapp.models import PL 
pl = PL.objects.get(id=1) 
prt = PRT.objects.get(id=1) 
pl.mentionedby.add(prt) 
Verwandte Themen