django-tastypie - 如何通过关系实现多种多样性

时间:2012-02-08 11:33:29

标签: django api tastypie django-orm

我正在为一个项目开发API,我通过OrderProducts与Order / Products建立了关系:

在catalog / 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'

它给我这个错误消息:“'产品'对象没有属性'order'”。所以我不确定什么是错的或遗漏的,它可能也需要我的产品资源中的东西,但我尝试了几种方法但没有成功。欢迎任何帮助:)

1 个答案:

答案 0 :(得分:2)

问题在于这一行:

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

错误很简单。 Product实际上没有名为order的属性。您的OrderProduct联接表有,但您的M2M不会返回OrderProduct,而是返回Product