2017-07-17 1 views
0

このようなsqlクエリをdjangoにどのように提示しますか?Djangoで結合クエリを表現する方法は?

select * from question LEFT JOIN (select * from question_solved where username = 'ashu' 

) AS result on question.q_id = result.q_id 

Iを別々に、クエリを実行しようとし、

Q = question_solved.objects.filter(ユーザ名= 'アッシュ')

Y = Question.objects.filter(q__q_id = Question.q_id)

しかし、それは

django.core.exceptions.FieldError: Cannot resolve keyword 'q' into field. Choices are: q_answer, q_content, q_id, q_submission, q_tags, q_title, q_type 

私に私のモデルファイルをエラーを与えている

from django.db import models 

# Create your models here. 

class Question(models.Model): 
    q_id = models.CharField(primary_key=True, max_length=20) 
    #q_difficulty = models.IntegerField() 
    q_title = models.CharField(max_length = 200) 
    q_content = models.CharField(max_length = 1000) 
    q_type = models.IntegerField() 
    q_answer = models.FloatField() 
    q_submission = models.IntegerField() 
    q_tags = models.CharField(max_length=10) 


class Student(models.Model): 
    username = models.CharField(primary_key=True, max_length=30) 
    password = models.CharField(max_length=200) 

class question_solved(models.Model): 
    q_id = models.CharField(primary_key=True, max_length=20) 
    username = models.CharField(max_length=30) 

クエリはこのような結果を生成します。事前に

enter image description here

感謝。

+1

投稿ファイル – badiya

+0

あなたは 'Question'モデルですべてのプレフィックスに' q_'を付けるのですか?私はコードレビューの際にそれを徹底的に取り戻すだろう。 – Chris

答えて

0

ForeignKeyを使用してモデルを関連付ける必要があります。 私は、ユーザ名ashuによって解決されたすべての質問を取得したいと思っていたからです。あなたはこのような操作を行うことが可能なモデルの現在の状態では

まず、ユーザ名ashuのためのテーブルにあるq_id値のリストを取得します。あなたはvalues_list()を使用していることを行うことができます。

quest=question_solved.objects.filter(username='ashu').values_list('q_id',flat=True) 

はその後 Questionテーブルから、以前のクエリから取得したリストに q_idを持つオブジェクトをフィルタリングします。

solved_questions=Question.objects.filter(q_id__in=quest) 

あなたがall()

all_questions = Question.objects.all() 

ですべての問題を取得することができ、あなたがしたい場合は、「アッシュand other which is not solved by ashu`によって解決の問題のリストである2つの別々のクエリセット1を持つことができます。

unsolved_questions=Question.objects.exclude(q_id__in=quest). 
+0

実際に私はすべての質問を取得しようとしており、ユーザー 'ashu'が質問を解決した質問に対して、結合列のユーザー名とq_idの値が表示されます。それ以外の場合はnullが表示されます。 –

+1

@AshutoshAgarwal私の編集を参照してください – badiya

+0

イメージを参照してください。私は画像のように私の結果をしたい。私はちょうど今、画像を追加しました。クエリは、SQLシェルでうまく動作していますが、私はdjangoでそれを使用することはできません。 –

関連する問題