【问题标题】:Django queryset returns incorrect model instances but iteration worksDjango 查询集返回不正确的模型实例,但迭代有效
【发布时间】:2017-04-03 15:26:05
【问题描述】:

我有一个模型代表一个量规,每个量规都有多行。出于某种原因,我运行下面的查询,我收到一个不完整的查询集。变量 termrubric 是已经在代码中评估并返回正确的 rubric 模型的 rubric 查询集。

"""
semesterrubric pulls both Rubric 1 and Rubric 2
Rubric 1:
    Row: 2 Row:4 
Rubric 2:
    Row: 1 Row : 1
"""
Row.objects.filter(rubric=semesterrubric)
<QuerySet [<Row: 2>, <Row: 4>]>

我知道它是不完整的,因为当我遍历学期规则查询集对象并从每个单独的规则中提取行时,我收到了两个带有我需要的行的查询集。

[rubric.row_set.all() for rubric in semesterrubric]
[<QuerySet [<Row: 2>, <Row: 4>]>, <QuerySet [<Row: 1>, <Row: 1>]>]

我想要一个返回所有行的查询。我错过了什么?我已经阅读了(大部分)关于查询集的文档,但我可能错过了一些东西。

models.py

class Rubric(models.Model):
    name = models.TextField(default="Basic Rubric", unique=True)
    template = models.BooleanField(default=True)

    def __str__(self):
        return self.name

class Row(models.Model):
    CHOICES = (
    ('0', 'Your string for display'),
    ('4','Exemplary'),
    ('3','Proficient'),
    ('2','Partially Proficient'),
    ('1','Incomplete'),
    )
    name = models.CharField(default="None", max_length=100)
    rubric = models.ForeignKey(Rubric)
    row_choice = models.CharField(max_length=20,choices=CHOICES, default="0")
    excellenttext = models.TextField(default="", blank=True)
    proficienttext = models.TextField(default="", blank=True)
    satisfactorytext = models.TextField(default="", blank=True)
    unsatisfactorytext = models.TextField(default="", blank=True)
    standards = models.ManyToManyField(Standard)

    def __str__(self):
        return self.row_choice

【问题讨论】:

  • 变量 termrubric 是一个 rubrics 的查询集。它不应该是一个查询集。它应该是一个Rubric 实例/对象。

标签: python django django-queryset


【解决方案1】:

我不建议传递这样的查询集。试试:

Row.objects.filter(rubric__in=semesterrubric.all())

【讨论】:

    【解决方案2】:

    您收到了两个查询集,因为您的 semesterrubric 内部有两个元素。试试Row.objects.filter(rubric__in=semesterrubric) 这应该可以解决您的问题

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 2020-08-28
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      相关资源
      最近更新 更多