Django中ManyToMany字段add方法:如何判断是新增还是重复?
Django ManyToManyField add() 方法的去重特性
嘿,我来给你讲清楚这个问题~
首先先纠正个小细节:你写的MyUser.items.add(item1)其实应该用MyUser的实例来调用,比如先获取一个具体的MyUser对象:
my_user = MyUser.objects.get(user=request.user) # 举个获取实例的例子 my_user.items.add(item1)
回到你的核心问题:这个add()操作会不会产生重复关联?答案是不会——Django的ManyToManyField的add()方法自带去重逻辑:
- 如果
item1还没和当前MyUser实例建立过关联,那么这个操作会新增一条关联记录; - 如果
item1已经和该实例关联过了,这个方法会直接忽略该操作,不会创建重复的关联,也不会抛出任何错误。
如果你想要明确知道这次操作到底是新增了关联还是本来就存在,可以提前做个简单检查:
item_exists = my_user.items.filter(pk=item1.pk).exists() my_user.items.add(item1) if item_exists: print("关联本来就存在,没做任何新增操作") else: print("成功新增了关联")
本质上,Django在处理add()的时候,会先检查关联关系是否已经存在,只有不存在的情况下才会执行插入操作,所以完全不用担心重复的问题~
内容的提问来源于stack exchange,提问作者fuzes
相关产品推荐
相关产品推荐

