2012-04-03 9 views
1

私のdjangoアプリケーションで次のモデルを使用していて、複数のフィールドにまたがってクエリを実行したい。私は別の場所を見回しましたが、正確に必要なものを見つけることができませんでした。複数のモデルにわたるdjangoアクセスフィールド

class Attempt(models.Model, object): 
    '''Creates an Attempt Entity which is a subclass of models.Model class''' 
    attemptID_f = models.AutoField(primary_key=True) 
    questionID_f = models.ForeignKey(Question, verbose_name="Question", null=False) 
    userID_f = models.ForeignKey(User, verbose_name="User ID", null=False) 
    solution_f = models.TextField("Solution uploaded by the User", null=False) 
    errorReportID_f = models.ForeignKey(ErrorReport,verbose_name="Error Report for the Solution", null=True) 
    status_f = models.BooleanField("Status of attempt - true = right, false = wrong", blank=True, default=False) 
    timeOfSubmission_f = models.DateTimeField("Time of Submission", null=False) 
    compilerVersion_f = models.ForeignKey(CompilerVersion, verbose_name = "Compiler version of the Attempt",null=False) 

class Question(models.Model, object): 
    '''Creates the entity question 
    which is a subclass of models.Model''' 
    questionID_f = models.AutoField(primary_key=True) 
    questionText_f = models.TextField("Problem Statement", null=False) 
    questionTitle_f = models.CharField("Problem Title", max_length = 50, null = False) 
    level_f = models.ForeignKey(Level, verbose_name="Question Level", null=False) 
    type_f = models.ForeignKey(Type, verbose_name="Type of Question", null=False) 
    timeLimit_f = models.FloatField("Time Limit for Question",null=False) 

class Type(models.Model): 
    '''Creates the entity Type which is a subclass of models.Model class''' 
    typeID_f = models.AutoField(primary_key=True) 
    typeName_f = models.CharField("Type Name" , max_length = 30 , null = False) 

typesm = Attempt.objects.filter(userID_f = request.user).values('attempt__questionID_f__type_f__typeID_f') 

私が試みモデルのquestionID_fフィールドによって参照される質問モデルのtype_fフィールドによって参照されているタイプのモデルのtypeID_fフィールドを、参照したい場合は、有効なarguement attempt__questionID_f__type_f__typeID_fですか?

ご協力いただければ幸いです。ありがとう、

+2

試しましたか?あなたが試したことに問題はありますか? –

+0

'models.Model、object'から継承するポイントは何ですか?ミックスインは、何かを追加する場合にのみ有用であり、 'object'は定義によって行うことができません。 –

+0

"_f"があなたの会社のスタイルガイドにあることを本当に願っています... –

答えて

1

は次のようになります。

typesm = Attempt.objects.filter(userID_f = request.user).values('questionID_f__type_f__typeID_f') 

私はあなたがAttemptモデルを照会しているとき、あなたはそこにattempt__接頭辞を置く理由はわかりません。

参照:Lookups that span relationships

+0

ありがとうございます。それはそれをした! :) –

0

私はあなたが、あなたが書いたものと似たようなフィルタを使用している場合は罰金

Attempt.objects.filter(questionID_f__type_f__typeID_f=42) 

がタイプを持つすべてのAttemptのオブジェクトを検索するに動作するはずだと思う42

の場合あなたは試行インスタンスがあるattempt書き込みたい書き込み

if attempt.questionID_f.type_f.typeID_f == 42: 
    print "Answer found!" 
個の

いくつかのスタイルのポイント:

  • Djangoはデフォルト
  • によると呼ばれるAutoFieldidを作る必要はobject
  • から継承していないためには、すごいものを_f sが醜いです! オプションを使用したい場合は、
  • にする必要はありません。which is a subclass of models.Modelをあなたの助けにする必要はありません。これはコードとすべてのPythonドキュメントシステムがそれを理解している
+0

values()関数呼び出しの文字列引数と同じものを使用できますか? –

関連する問題