【问题标题】:Django ManyToMany relation add() errorDjango ManyToMany 关系 add() 错误
【发布时间】:2010-11-16 14:41:27
【问题描述】:

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

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()

有人知道为什么会这样吗?最好的解决方法是什么?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    直接添加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)
    

    【讨论】:

      【解决方案2】:

      这些是完整的模型吗?我只能假设某些东西在某处被覆盖了,这可能不应该被覆盖。

      你能发布完整的代码吗?

      【讨论】:

      • Hey Mez - 这些几乎是完整的模型。其他字段只是名称和类别(均为 text/varchar 类型),所以我不确定您所说的覆盖是什么意思。
      猜你喜欢
      • 1970-01-01
      • 2019-09-14
      • 2013-04-08
      • 2016-01-02
      • 2019-03-27
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      相关资源
      最近更新 更多