2012-10-13 64 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')