【问题标题】:Combine 2 Django Querysets组合 2 个 Django 查询集
【发布时间】:2018-08-02 22:13:09
【问题描述】:

我想在 Django 中使用操作数“|”合并两个查询集但它不起作用。我知道要做到这一点,您必须拥有来自同一模型的查询集。这正是我想要做的。循环是因为我想获取随机对象并将其合并为一个。任何人都知道为什么 Django 抛出“TypeError: unsupported operand type(s) for |: 'Sentence' and 'Sentence'” 错误?

根据以下来源,这是实现它的方法: https://simpleisbetterthancomplex.com/tips/2016/06/20/django-tip-5-how-to-merge-querysets.html

from random import randint
from sentences.models import Sentence

sentence_number = 3

first_pk = Sentence.objects.first().pk

last_pk = Sentence.objects.last().pk

for i in range(sentence_number):

    next_pk = randint(first_pk, last_pk)
    sentence_qs = Sentence.objects.get(pk=next_pk)
    type(sentence_qs)

    if i > 1:
       sentence_qs = sentence_qs | Sentence.objects.get(pk=next_pk)

【问题讨论】:

  • 您正在合并两个 objects 而不是两个 querysets。尝试将get 替换为filter

标签: python django


【解决方案1】:

不在解释器附近,但是,您正在合并两个对象而不是两个查询集。尝试用过滤器替换get。从随机导入randint

from sentences.models import Sentence

sentence_number = 3

first_pk = Sentence.objects.first().pk

last_pk = Sentence.objects.last().pk

for i in range(sentence_number):

    next_pk = randint(first_pk, last_pk)
    sentence_qs = Sentence.objects.filter(pk=next_pk)
    type(sentence_qs)

    if i > 1:
       sentence_qs = sentence_qs | Sentence.objects.filter(pk=next_pk)

【讨论】:

  • 你是对的。现在我有查询集类和合并作品。谢谢!
猜你喜欢
  • 2022-11-08
  • 2020-04-27
  • 1970-01-01
  • 2020-12-24
  • 2013-09-06
  • 2016-05-09
  • 2013-05-11
  • 2021-05-29
  • 2019-12-03
相关资源
最近更新 更多