【问题标题】:how can i pass a list to objects.get in Django我如何将列表传递给 Django 中的 objects.get
【发布时间】:2021-04-09 04:05:29
【问题描述】:

我正在使用 Django / Rest Framework 做一个小项目我想知道是否有任何方法 传递这样的列表

mycontact = Contact.objects.get(id=[14,26,44,88])

而不是

mycontact = Contact.objects.get(id=14)

这是我的完整代码:

@action(methods=['post'], detail=False)
def listin(self, request):
    mylist = List.objects.get(id=request.data['listId'])
    mycontact = Contact.objects.filter(id__in=[14,26,44,88])
    mycontact.list.add(mylist)
    return Response("Good")

我正在寻找解决方案,因为我有很多TomanyField

【问题讨论】:

  • 检查this 答案。希望对你有帮助
  • 上传你的模型,为什么Contact有list属性?

标签: python django


【解决方案1】:

get 只接受一个参数 如果你想传递一个 id 列表,你可以这样做

mycontact = Contact.objects.filter(id__in=[14,26,44,88])  # this will return an iterable queryset
or
mycontact = list(Contact.objects.filter(id__in=[14,26,44,88]))  # this will return a list

【讨论】:

  • @ramwin 你能仔细检查我的问题(更新)
【解决方案2】:

Jay 的答案可能正是您想要的。但是,如果您需要替代方法

contacts = [Contact.objects.get(id=id) for id in (14, 26, 44, 88)]

【讨论】:

  • 你能仔细检查我的问题(更新)
【解决方案3】:

你可以使用get()获取单个唯一对象,获取多个id对象你可以使用filter()

尝试使用以下语句

mycontact = Contact.objects.filter(id__in=[14,26,44,88])

当你想使用参数列表查找时,可以使用in操作符。

【讨论】:

  • 你能仔细检查我的问题(更新)
【解决方案4】:

另外,如果您的数据库表记录太多,请考虑使用in_bulk

mycontact = Contact.objects.in_bulk([14,26,44,88])

更新:

在您的情况下,循环遍历 mycontact 查询集并将 mylist 设置为每个对象:

mylist = List.objects.get(id=request.data['listId'])
mycontact = Contact.objects.filter(id__in=[14,26,44,88])
for contact in mycontact:
    contact.list.add(mylist)

或者反之亦然:

mylist = List.objects.get(id=request.data['listId'])
mylist.contact_set.set([14,26,44,88])

注意:我使用了默认的相关名称contact_set

【讨论】:

  • 你能仔细检查我的问题(更新)
猜你喜欢
  • 2021-11-12
  • 1970-01-01
  • 2021-05-15
  • 2019-03-23
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 2015-07-10
相关资源
最近更新 更多