django - 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 文档中所述: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)
推荐阅读
- algorithm - 在海上交战中寻找目标舰船的最佳解决方案
- terraform - 有没有办法跟踪我的状态文件被放置/引用的位置?
- java - Spring WebClient - HTTP 错误状态的自定义响应回调
- unit-testing - 即使添加了“core-testing”依赖项,也无法在我的“jUnit”测试用例中导入 InstantTaskExecutorRule - Android 测试
- html - 如何将此特定代码设置为部分
- javascript - 如何在本机反应中以日期格式添加上标
- python-3.x - 没有名为 xxxx 的模块。如何导入相对路径?
- composer-php - composer 只能安装以下之一:symfony/console
- asp.net-core - 将自定义实体与 OpenIddict 一起使用
- c++ - 均匀度差异