Skip to main content
 首页 » 编程设计

python之Django 查询集返回不正确的模型实例,但迭代有效

2025年05月04日27yjmyzz

我有一个表示评分细则的模型,每个评分细则都有多行。出于某种原因,我运行了下面的查询,并且收到了一个不完整的查询集。变量 semesterrubric 是一个已经在代码中评估过的 rubrics 查询集,并返回正确的 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>]>] 

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

模型.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 

请您参考如下方法:

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

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