2012-10-13 116 views
0

我最近開始使用django-tastypie,並且非常喜歡這個框架。說到這一點,我得到了一個關於POST的OneToOne關係模型的問題,並花費了大量的時間,但不知道缺少什麼。下面是模式和資源碼 -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) 
    ....... 

第二種模式是具有問題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與答辯屬性沿着正確的響應。然而,當我嘗試發佈的數據保存在這一個問題/答案失敗與下面的錯誤 -

「{」 ERROR_MESSAGE「:‘’,‘追蹤’:」回溯(最近通話 最後一個): \ n \ n文件 \「/ Library/Python/2.7/site-packages/tastypie/resources.py \」,第192行, ................... .................................................. ................. line 636,in hydrate \ n
value = super(ToOneField,self).hydrate(bundle)\ n \ n文件 \「/ Library/Python/2.7/site-packages/tastypie/fields.py \「,第154行,在 hydrate \ n elif self.attribute和getattr(bundle.obj, self.attribute,None):\ n \ n F ile \「Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/db/models/fields/related.py \」,行343,在得到 \ n提高 self.field.rel.to.DoesNotExist \ n \ nDoesNotExist \ n 「}」

有人能指出我錯過了什麼?

+0

這發生在我身上時,我忘了補充資源URI通話。 –

回答

0

我認爲這樣的:

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

導致的問題。您的Question模型中沒有questionanswer字段,並且Django期望這一點。

爲了測試,您可能需要查看是否可以在shell中創建實例。 Tastypie docs說下面關於ToOneField

這個子類要求Django的ORM層正常工作。

我想這可能不是這種情況。

爲了提供一個問題的答案,你可能要設置related_name,就像這樣:

question = fields.ForeignKey('myapp.api.QuestionResource', 'question', related_name = 'questionanswer')