Tastypie: campo de recurso nested no encontrado

Tengo este codigo

#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 

El problema es que recibo este error al enviar este objeto:

 {"video":21,"text":"sadasds"} 

Al campo ‘video’ se le dieron datos que no eran un URI, ni un diccionario similar y no tienen un atributo ‘pk’: 21.

Si comento esta línea:

 video = fields.ForeignKey(VideoResource,'video',full=True) 

Todo funciona bien, pero luego no puedo obtener esta información (video) cuando pregunto a /api/v1/questions/

Mi pregunta es:

  • ¿Debería crear recursos, uno para publicar y otro para recuperar información? – esta no parece una solución realmente buena. o
  • ¿Cómo puedo crear recursos nesteds? Intenté seguir el ejemplo en la web http://djangotastypie.readthedocs.org/en/latest/cookbook.html#nested-resources pero, como puede ver, por alguna razón, no funciona.

tal vez tus ojos puedan ayudarme a encontrar el error 🙂 ¡Gracias!

Al campo ‘video’ se le dieron datos que no eran un URI, ni un diccionario similar y no tienen un atributo ‘pk’: 21.

Por lo tanto, esto significa que el entero 21 no cumple con los requisitos para ese campo, sino que también da una vaga sugerencia de lo que cumplirá con los requisitos.

Primero, puede enviar el URI para el registro, esta es probablemente la forma más correcta, ya que los URI son realmente únicos, mientras que los pk no lo son.

 {"video":"/api/v1/video/21","text":"sadasds"} 

o, puede enviar un objeto similar al diccionario con el conjunto de campos pk.

 {"video":{'pk':21},"text":"sadasds"} 

La razón por la que funciona cuando comenta el campo ForeignKey es porque entonces tastypie lo trata como un IntegerField, al que se puede hacer referencia mediante un entero liso.

Esto me dejó atrofiado por un tiempo, ¡espero que ayude!