首页 > 解决方案 > django - 当关系已经存在时添加到 M2M 关系

问题描述

我有这样的 M2M 关系:

class Foo:
    # foo fields...

class Bar:
    Foos = ManytoManyField(Foo)

我正在尝试将 foo 添加到归因于 Bar 的 foo 列表中,所以这就是我所拥有的:

    if Foo not in Bar.Foos:
        Bar.Foos.add(Foo)

问题:if判断真的有必要吗?

谢谢

标签: django

解决方案


如 Django 文档中所述:https ://docs.djangoproject.com/en/2.2/topics/db/examples/many_to_many/

添加第二次就可以了,不会重复关系

您可以bar.foo.add(baz)多次调用,它不会在数据库中创建重复的关系或行。

ps:在 Python 中,所有内容(变量、实例等)都必须小写,单词之间用下划线分隔。例外是 ClassNames、ExceptionNames 和 GLOBAL_CONSTANT_NAMES。Cf:Python 中变量和函数名称的命名约定是什么?

以您的上述代码为例:

class Bar:
    foos = ManytoManyField(Foo)

def your_view(id):
    foo = Foo.objects.get(id=id)
    bar = Bar.objects.get(foo=foo)

    if foo not in bar.foos:
        bar.foos.add(foo)    

推荐阅读