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

dje*_*evg 7 api django django-orm tastypie

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

在catalog/models.py中

class Product(models.Model):
    ...
Run Code Online (Sandbox Code Playgroud)

在order/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)
    ...
Run Code Online (Sandbox Code Playgroud)

现在,当我通过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'
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*att 2

问题出在这一行:

order = fields.ToOneField(OrderResource, 'order')
Run Code Online (Sandbox Code Playgroud)

这个错误非常简单。Product确实没有名为 的属性order。您的OrderProduct连接表会返回 s,但您的 M2M 不会返回OrderProducts Product

  • 你好@djevg 你能解决这个问题吗?如果是这种情况,您可以发布您的解决方案吗?谢谢! (7认同)