0

私は最近 django-tastypie を始めましたが、これまでのところフレームワークが大好きです。そうは言っても、モデルとの OneToOne 関係の POST で問題が発生しており、かなりの時間を費やしましたが、何が欠けているのかわかりませんでした。モデルとリソース コードは次のとおりです。

モデル

class Question(TimeStampedModel):
    question_title = models.CharField("question title", max_length=100)     
    question_desc = models.TextField("question description", max_length=1000)
    .......

2 番目のモデルは、質問と OneToOne の関係を持っています -

class QuestionAnswer(TimeStampedModel):
    question = models.OneToOneField(Question)
    .....

リソース

QuestionAnswerResource -

class QuestionAnswerResource(ModelResource):
    question = fields.ForeignKey('myapp.api.QuestionResource', 'question')

    class Meta:
        queryset = QuestionAnswer.objects.all()
        resource_name='questionanswer'

QuestionResource -

class QuestionResource(ModelResource):
    questionanswer = fields.OneToOneField('myapp.api.QuestionAnswerResource', 'questionanswer', full=True) 

    class Meta:
        queryset = Question.objects.all()
        resource_name = 'question'

上記のセットアップでは、質問インスタンスとその回答属性を使用して、GET で正しい応答を取得します。ただし、この質問/回答を保存するためにデータを POST しようとすると、以下のエラーで失敗します -

"{"error_message": "", "traceback": "Traceback (最新の呼び出しが最後):\n\n ファイル \"/Library/Python/2.7/site-packages/tastypie/resources.py\", 192 行目、................................................................................. ................................... 636 行目、ハイドレート\n
値 = super(ToOneField, self).hydrate(bundle)\n\n ファイル \"/Library/Python/2.7/site-packages/tastypie/fields.py\"、154 行目、ハイドレート内\n elif self.attribute および getattr(bundle.obj) , self.attribute, None):\n\n ファイル \"/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/db/models/fields/related.py\ "、343 行目、get \n raise self.field.rel.to.DoesNotExist\n\nDoesNotExist\n"}"

誰かが私が欠けているものを指摘できますか?

4

1 に答える 1

0

私はこれだと思います:

questionanswer = fields.OneToOneField('myapp.api.QuestionAnswerResource', 'questionanswer', full=True)

問題を引き起こします。questionanswerモデルにはフィールドがなくQuestion、Django はそれを想定しています。

テストするには、シェルでインスタンスを作成できるかどうかを確認する必要があります。Tastypieのドキュメントでは、 について次のように述べていますToOneField

このサブクラスが正しく機能するには、Django の ORM レイヤーが必要です。

ここではそうではないかもしれないと思います。

設定したい質問の回答を提供するにはrelated_name、次のようにします。

question = fields.ForeignKey('myapp.api.QuestionResource', 'question', related_name = 'questionanswer')
于 2012-10-15T11:23:51.900 に答える