2009-08-04 40 views
3

我有一個模型,它看起來像這樣,Django的多對多關係的add()錯誤

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

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

將得到許多在MySQL中許多表形成,

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

現在,如果PL PL是一個對象,PRT是PRT的,然後做

pl.mentionedby.add(prt) 

給我一個錯誤

不正確的整數值:在第1" 行的列 'prt_id' 'PRT對象'

pl.mentionedby.add(prt.tid) 

工作正常 - 有一點需要注意。

我可以看到pl.mentionedby.all()中的所有元素,但我無法訪問提及的PRT對象並查看其prt.mentionedby_set.all()

有誰知道爲什麼會發生這種情況?最好的解決辦法是什麼?

謝謝!

回答

0

這些是完整的模型嗎?我只能假定某個地方被重寫了,這可能不應該。

你能發表完整的代碼嗎?

+0

嘿梅茲 - 這些幾乎是完整的模型。其他字段只是一個名稱和類別(都是text/varchar),所以我不知道你的意思是什麼重寫。 – viksit 2009-08-04 21:09:05

6

直接添加prt應該先嚐試一下。你如何檢索plprt?假設你的數據庫中有一些數據,請嘗試Django shell中的那些命令,看看它是否有效。這個問題似乎有一些缺失的信息。運行後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)