Mc-*_*Mc- 7 python django tastypie
我有这个代码:
#api model
class VideoResource(ModelResource):
class Meta:
queryset = Video.objects.all()
include_resource_uri = False
resource_name = 'video'
authorization = DjangoAuthorization()
class QuestionResource(ModelResource):
user = fields.ToOneField(UserResource,'user',full=True)
video = fields.ForeignKey(VideoResource,'video',full=True)
class Meta:
queryset = Question.objects.all()
resource_name = 'question'
include_resource_uri = False
authorization = DjangoAuthorization()
def obj_create(self, bundle, request=None, **kwargs):
import json
temp = json.loads(request.body, object_hook=_decode_dict)
video = Video.objects.get(pk=temp['video'])
return super(QuestionResource, self).obj_create(bundle, request, user=request.user, video=video)
#model
class Question(models.Model):
text = models.CharField('Question',max_length=120)
created = models.DateTimeField(auto_now_add=True)
enabled = models.BooleanField(default=True)
flag = models.BooleanField(default=False)
allow_comments = models.BooleanField(default=True)
thumbnail_url = models.CharField(default='video.jpg',blank=True, null=True,max_length=200)
user = models.ForeignKey(User)
video = models.ForeignKey(Video)
def __unicode__(self):
return self.text;
class Video(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now_add=True)
url = models.URLField(default="")
user = models.ForeignKey(User)
def __unicode__(self):
return str(self.pk) + ' > ' + self.status
Run Code Online (Sandbox Code Playgroud)
问题是我在发送此对象时收到此错误:
{"video":21,"text":"sadasds"}
Run Code Online (Sandbox Code Playgroud)
"视频"字段的数据不是URI,不是字典,也没有'pk'属性:21.
如果我评论这一行:
video = fields.ForeignKey(VideoResource,'video',full=True)
Run Code Online (Sandbox Code Playgroud)
一切正常,但是当我要求时,我无法得到这些信息(视频) /api/v1/questions/
我的问题是:
也许你的眼睛可以帮我找到错误:)谢谢!
"视频"字段的数据不是URI,不是字典,也没有'pk'属性:21.
因此,这意味着整数21不符合该字段的要求,它还给出了符合要求的模糊暗示.
首先,你可以发送记录的URI,这可能是最正确的方式,因为URI真的是唯一的而pk不是.
{"video":"/api/v1/video/21","text":"sadasds"}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用pk字段集发送类似字典的对象.
{"video":{'pk':21},"text":"sadasds"}
Run Code Online (Sandbox Code Playgroud)
注释掉ForeignKey字段时它工作的原因是因为tastypie将其视为IntegerField,可以通过普通整数引用.
这让我发育了一段时间,希望它有所帮助!
| 归档时间: |
|
| 查看次数: |
2217 次 |
| 最近记录: |