2017-04-03 1 views
0

私はルーブリックを表すモデルを持っており、各ルービックには複数の行があります。何らかの理由で、私は以下の質問を実行し、不完全なクエリーセットを受け取ります。変数semesterrubricは、コード内ですでに評価されているルーブリックのクエリセットであり、正しいルーブリックモデルを返します。Djangoクエリーセットは不正なモデルインスタンスを返しますが反復処理を行います

""" 
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クエリセットオブジェクトを反復処理し、個々のルーブリックから行を引いたときに、私は私が必要な行を持つ2つのクエリセットを受けるので、それが不完全であることを知っています。

[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はrubrics *のquerysetです。クエリーセットではありません。それは 'Rubric'インスタンス/オブジェクトでなければなりません。 –

答えて

2

私はこのようなクエリセットを渡すにはお勧めしませんと思います。試してみてください。

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

あなたsemesterrubricが内側2つの要素を持っているので、次の2つのクエリセットを受け取りました。試してくださいRow.objects.filter(rubric__in=semesterrubric) これはあなたの問題を解決するはずです

関連する問題