2017-04-03 2 views
0

루 브릭을 나타내는 모델이 있으며 각 루 브릭에는 여러 행이 있습니다. 어떤 이유로 든 아래 쿼리를 실행하고 불완전한 쿼리 집합을받습니다. 변수 semesterrubric은 이미 코드에서 평가 된 루 브릭의 쿼리 세트이며 정확한 루 브릭 모델을 반환합니다.Django queryset은 잘못된 모델 인스턴스를 반환하지만 반복 작업을 수행합니다.

""" 
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>]> 

나는 내가 semesterrubric의 검색어 객체를 반복하고 각각의 섹션에서 행을 끌어 때, 내가 필요로하는 행과 두 개의 검색어 세트를받을 수 있기 때문에 불완전 알고있다.

[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 
+0

* 변수 semesterrubric은 루블릭 *의 queryset입니다. 그것은 queryset해서는 안됩니다. 그것은'Rubric' 인스턴스/객체 여야합니다. –

답변

2

. 시도 :

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

semesterrubric에는 두 개의 요소가 있기 때문에 두 개의 쿼리 세트를 받았습니다. 시도하십시오 Row.objects.filter(rubric__in=semesterrubric) 이것은 귀하의 문제를 해결할 것입니다