gpt4 book ai didi

python - Django:通过 pk 将模型添加到 ManyToMany,无需获取

转载 作者:太空狗 更新时间:2023-10-30 00:02:56 26 4
gpt4 key购买 nike

我有模型 A 和模型 B 的 ManyToMany。我有一个模型 B 的对象的 pk,我想将它添加到模型 A 的对象的 ManyToManyField 中。是否可以在不消耗资源的情况下添加它从数据库中获取对象 b?我已经有了它的 pk,我可以不获取就添加它吗?

最佳答案

您可以使用add()。 Django 知道如果它是一个数字而不是一个对象,就把它当作一个主键:

class Foo(models.Model):
bars = models.ManyToMany('Bar')

class Bar(models.Model):
...


>>> foo = Foo.objects.latest('id') #arbitrary
>>> target_pk = 5
>>>
>>> # method 1:
>>> bar = Bar.objects.get(pk=target_pk)
>>> foo.bars.add(bar)
>>>
>>> # method 2:
>>> foo.bars.add(target_pk) # will work just the same

target_pk 也可以是字符串。如果你想添加一个主键列表,你必须将它们作为参数传递,因此:

>>> pk_list = [1, 2, 3]
>>> foo.bars.add(*pk_list)

如果项目是字符串,这也适用,即 pk_list = ['1', '2', '3']。请记住,如果其中一个 pk 是针对一个已经相关的对象,您将得到一个 UNIQUE constrained failed 错误

如果主键不是整数,这甚至会起作用。假设我将主键定义为长度为 15 的 CharField,并且我有一个主键为“Lorem Ipsum”的对象,这样做:

>>> foo.bars.add('Lorem Ipsum')

会像魅力一样工作!

关于python - Django:通过 pk 将模型添加到 ManyToMany,无需获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22595214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com