2012-02-08 23 views
7

Estoy trabajando en una API para un proyecto y tengo una Orden/Productos relación a través de OrderProducts como este:django-tastypie - Como hacer muchosamuchos través de la relación

En el catálogo/models.py

class Product(models.Model): 
    ... 

con el fin/models.py

class Order(models.Model): 
    products = models.ManyToManyField(Product, verbose_name='Products', through='OrderProducts') 
    ... 

class OrderProducts(models.Model): 
    order = models.ForeignKey(Order) 
    product = models.ForeignKey(Product) 
    ... 

Ahora, cuando cargo un pedido a través de la API me gustaría llegar los productos relacionados, así, así que probamos este (con django-tastypie):

Con el fin/api.py

class OrderResource(ModelResource): 
    products = fields.ToManyField('order.api.OrderProductsResource', products, full=True) 

    class Meta: 
     queryset = Order.objects.all() 
     resource_name = 'order' 

class OrderProductsRessource(ModelResource): 
    order = fields.ToOneField(OrderResource, 'order') 

    class Meta: 
     queryset = OrderProducts.objects.all() 
     resource_name = 'order/products' 

que me da este mensaje de error: "objeto 'producto' no tiene atributo 'orden'". Así que no estoy seguro de qué es lo que falta o falta, probablemente también requiera algo en mi recurso de Producto, pero lo intenté de varias maneras sin éxito. Cualquier ayuda sería bienvenida :)

Respuesta

2

El problema es con esta línea:

order = fields.ToOneField(OrderResource, 'order') 

El error es bastante sencilla. Product realmente no tiene un atributo llamado order. Su tabla de combinación OrderProduct sí lo hace, pero su M2M no devuelve OrderProduct s devuelve Product s.

+0

Probablemente aún me falta algo, pero no veo qué campo se supone que ToOneField debe usar o qué se supone que debe devolver el M2M. – djevg

+0

Necesita un 'ProductResource' no un' OrderProductResource'. Ese es tu problema. Es como configurar el M2M en el modelo en sí. Usted no hace 'models.ManyToManyField (OrderProduct)'; usted hace 'models.ManyToManyField (Product)'. Es lo mismo aquí, creas tu 'ToManyField' con un enlace a' ProductResource' que devuelve 'Product's. –

+0

Ok, lo tengo;) Por alguna razón, pensé que tenía que redefinir toda la relación dentro de la API, pero es más inteligente que eso ... Gracias por su ayuda. – djevg

Cuestiones relacionadas