我最近开始使用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 “}”
有人可以指出我缺少的东西吗?
答案 0 :(得分:0)
我认为:
questionanswer = fields.OneToOneField('myapp.api.QuestionAnswerResource', 'questionanswer', full=True)
导致问题。您的questionanswer
模型中没有Question
字段,Django期望这样。
要进行测试,您可能希望了解是否可以在shell中创建实例。 Tastypie docs对ToOneField
:
这个子类要求Django的ORM层正常工作。
我认为这可能不是这种情况。
为您可能想要设置related_name
的问题提供答案,如下所示:
question = fields.ForeignKey('myapp.api.QuestionResource', 'question', related_name = 'questionanswer')