从多对多字段中删除,但不从相关模型中删除

时间:2020-01-07 20:57:28

标签: python django

这是我在Django中的代码,


class Comment(models.Model):
    text = models.CharField(max_length=400)
    writer = models.ForeignKey(Email, on_delete=models.DO_NOTHING)
    replied_to = models.ManyToManyField('self', related_name='replied')
    class Meta:
        db_table = 'Comment'

当我将注释实例添加到replied_to时,它将添加到父对象,但被复制的实例在其replied_to字段中保留了指向相关对象的指针。 有没有一种方法可以删除指向相关评论的指针,而又不删除父级的回复实例?

1 个答案:

答案 0 :(得分:2)

是的,您可以在此处使用.remove(..)方法:

mycomment.replied_to.remove(othercomment)

这将从数据库中删除othercomment,但它将不再是replied_toManyToManyField的一部分。

请注意,默认情况下,与ManyToManyField的{​​{1}}关系是对称。这意味着,如果一个评论位于另一个评论的self中,则另一个评论的replied_to也包含第一个评论。您可以将symmetrical=… parameter [Django-doc]设置为replied_to以使其成为不对称

False