Django Tastypie POST请求OneToOne关系

时间:2012-10-13 15:18:18

标签: django django-models tastypie one-to-one

我最近开始使用django-tastypie并且到目前为止还喜欢这个框架。说到这一点,我在POST上遇到了关于OneToOne与模型关系的问题并且花费了大量时间,但无法想象什么是丢失的。这是模型和资源代码 -

模型

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上得到了正确的响应,带有Question实例及其answer属性。但是,当我尝试POST数据以保存问题/答案时,它失败并出现以下错误 -

  

“{”error_message“:”“,”traceback“:”Traceback(最近一次通话   最后):\ n \ n文件   \“/ Library / Python / 2.7 / site-packages / tastypie / resources.py \”,第192行,   .................................................. ....................................第636行,在水合物中\ n \ n   value = super(ToOneField,self).hydrate(bundle)\ n \ n文件   \“/ Library / Python / 2.7 / site-packages / tastypie / fields.py \”,第154行,in   hydrate \ 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行,获取 \ n加注   self.field.rel.to.DoesNotExist \ n \ nDoesNotExist \ n “}”

有人可以指出我缺少的东西吗?

1 个答案:

答案 0 :(得分:0)

我认为:

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

导致问题。您的questionanswer模型中没有Question字段,Django期望这样。

要进行测试,您可能希望了解是否可以在shell中创建实例。 Tastypie docsToOneField

说了以下内容
  

这个子类要求Django的ORM层正常工作。

我认为这可能不是这种情况。

为您可能想要设置related_name的问题提供答案,如下所示:

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