2012-10-09 39 views
14

Todavía soy nuevo en tastypie, pero parece una biblioteca muy ordenada. Desafortunadamente, estoy teniendo algunas dificultades con eso.Cómo crear un nuevo recurso con la clave externa en TastyPie

que tienen dos modelos, y dos recursos asociados con esos modelos:

class Container(models.Model): 
    pass 

class ContainerItem(models.Model): 
    blog = models.ForeignKey('Container', related_name='items') 

# For testing purposes only 
class ContainerResource(ModelResource): 
    class Meta: 
     queryset = Container.objects.all() 
     authorization = Authorization() 

class ContainerItemResource(ModelResource): 
    class Meta: 
     queryset = ContainerItem.objects.all() 
     authorization = Authorization() 

he creado un objeto Container a través de jQuery:

var data = JSON.stringify({}); 

$.ajax({ 
    url: 'http://localhost:8000/api/v1/container/', 
    type: 'POST', 
    contentType: 'application/json', 
    data: data, 
    dataType: 'json', 
    processData: false 
}); 

Sin embargo, cuando voy a crear un ContainerItem, Me sale este error:

container_id may not be NULL 

Así que mi pregunta es: ¿Cómo creo un recurso nuevo cuando hay una relación ForeignKey?

Respuesta

18

Las relaciones ForeignKey no se representan automáticamente en ModelResource. Vas a tener que especificar:

blog = tastypie.fields.ForeignKey(ContainerResource, 'blog') 

en el ContainerItemResource, y después de enviar el URI de recursos del contenedor cuando se contabiliza el elemento contenedor.

var containeritemData = {"blog": "/api/v1/container/1/"} 
$.ajax({ 
    url: 'http://localhost:8000/api/v1/containeritem/', 
    type: 'POST', 
    contentType: 'application/json', 
    data: containeritemData, 
    dataType: 'json', 
    processData: false 
}); 

Para obtener más información, visita estos links:

En esta sección, no es un ejemplo de cómo crear recursos básicos. Hacia la parte inferior, mencionan que los campos de relación no se crean automáticamente a través de la introspección:

http://django-tastypie.readthedocs.org/en/latest/tutorial.html#creating-resources

Aquí añaden un ejemplo de la creación de un campo de relación:

http://django-tastypie.readthedocs.org/en/latest/tutorial.html#creating-more-resources

Aquí es una propaganda sobre agregar relaciones inversas:

http://django-tastypie.readthedocs.org/en/latest/resources.html#reverse-relationships

Todos the docs son buenos si los lee como una novela, pero puede ser difícil encontrar cosas específicas entre ellos.

+0

Hola dokkaebi. Esta parece la solución, pero ¿dónde puedo leer más sobre esto? – NT3RP

+0

@ NT3RP editado para agregar algunos enlaces de documentos. – dokkaebi

+0

Sé que esta respuesta es bastante antigua, y mi pregunta está un poco fuera de tema, pero también tiene algo sabio que cuando 'OBTENES 'un recurso y tienes una clave externa, en lugar de la URL de recursos externos obtienes el objeto real ? –

Cuestiones relacionadas