2016-11-25 6 views
0

回答後の質問を保存する必要があります。保存後に関連するオブジェクトにアクセスする

class Answer(models.Model): 
    # ... 

    def save(self, *args, **kwargs): 

     super(Answer, self).save(*args, **kwargs) 

     # I need to get question object here 
     q = self.question.get() 

質問

class Question(models.Model): 
    # ... 
    answer = models.ForeignKey(Answer, 
           related_name='question', 
           blank=True, 
           null=True) 

これらは、外部キーによって関連しています。私が試してみたらanswer.question.get()私はそれが存在しないことが分かります。 answer_idによって質問を取得しようとすると、質問がまだ更新されていないかのいずれかが見つかりません(ただし、後で取得できます)。何か案は?

+0

あなたの関係は他のラウンドではいけませんか?今、答えは多くの質問を持つことができます。確かに4、2 + 2に対する答えは?と2 * 2しかし、確かに多くの答えまたはちょうど1つの答えの質問は、これをモデル化するためのよりよい方法ですか? – e4c5

+0

私はこれに同意します。しかし、私はこれをしなかっただけで修正しようとしました –

+0

'save()'メソッドの中で質問を検索しなければなりませんか?あなたが 'save()'メソッドの後でそれを検索すると、あなたの違いは何ですか? – ettanany

答えて

0

1つの質問は多くの回答を持つことができるので、1-Mの関係はQuestionからAnswerになります。したがってForeignKeyAnswerモデルに定義する必要があります。

class Answer(models.Model): 
    # ... 
    question = models.ForeignKey(Answer, 
           related_name='answers', 
           blank=True, 
           null=True) 

そしてsave方法であなたはいつもQuestionのためにする必要があり、この

class Answer(models.Model): 
    # ... 

    def save(self, *args, **kwargs): 

     super(Answer, self).save(*args, **kwargs) 
     q = self.question 

Answerのような属性questionにアクセスして質問を簡単に取得することができますので、blank=True, null=TrueForeignKeyであってはなりません質問。

+0

私はそれがどうあるべきかを知っていますが、私はモデルを変更することはできません。私はこのプロジェクト(すでにライブ)を修正しようとしていて、ウィンドウから飛び出したいと思っています... –

+0

その場合、単に 'q = self.question.all()'を使うと、すべての質問が返されます既存のモデル関係ごとに答えを求める。 – falloutcoder

+0

私はそれを試しました、私は空の配列を取得します。その時点でまだ質問はanswer_idに保存されていません。 –

関連する問題