Django ManyToMany关系add()错误

时间:2009-08-04 08:26:19

标签: python django django-models many-to-many

我有一个看起来像这样的模型,

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)

给我一​​个错误

  

不正确的整数值:'PRT对象'   对于第1行“prt_id”列

pl.mentionedby.add(prt.tid) 

工作得很好 - 有一点需要注意。

我可以看到pl.mentionedby.all()中的所有元素,但我无法转到提到的PRT对象并查看其prt.mentionedby_set.all()

有谁知道为什么会这样?什么是修复它的最佳方法?

谢谢!

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

这些是完整的型号吗?我只能假设在某个地方已经覆盖了某些东西,这可能不应该是。

你能发布完整的代码吗?