2012-02-08 64 views
7

我工作的一个API的一个项目让多对多和我有关系订单/产品通过OrderProducts这样的:Django的tastypie - 如何通过关系

在目录/ models.py

class Product(models.Model): 
    ... 

为了/ 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) 
    ... 

现在,当我通过API加载顺序我想获得相关产品为好,所以我想这(与Django的tastypie):

为了/ 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' 

它给我这个错误信息: “ '产品' 对象有没有属性 '秩序'”。所以我不确定有什么问题或缺失,它可能需要我的产品资源中的东西,但我尝试了几种方法,但没有成功。任何帮助将受到欢迎:)

回答

2

问题是这一行:

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

的错误是很直接的。 Product确实没有名为order的属性。您的OrderProduct连接表确实如此,但您的M2M不返回OrderProduct s它返回Product s。

+0

我可能仍然错过了一些东西,但我没有看到ToOneField应该使用什么字段,或者M2M应该返回什么字段? – djevg 2012-02-08 16:32:24

+0

您需要'ProductResource'而不是'OrderProductResource'。那是你的问题。就像在模型上设置M2M一样。你不要'models.ManyToManyField(OrderProduct)';你做'models.ManyToManyField(Product)'。在这里也是一样的,你创建你的'ToManyField'并且链接到返回Product的'ProductResource'。 – 2012-02-08 16:36:09

+0

好吧,明白了;)由于某些原因,我认为我必须重新定义API中的整个关系,但它比这更聪明...感谢您的帮助。 – djevg 2012-02-08 16:53:57