Django ManyToMany 关系 add() 错误

3 投票
2 回答
10294 浏览
提问于 2025-04-15 13:22

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

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 的命令行工具里试试这些命令,看看能不能成功。问题里似乎缺少了一些信息。在运行 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)

撰写回答