2012-02-08 35 views
7

tôi đang làm việc trên một API cho một dự án và tôi có một mối quan hệ thứ tự/Sản phẩm thông qua OrderProducts như thế này:django-tastypie - Làm thế nào để làm cho manytomany qua mối quan hệ

Trong Danh mục hàng/models.py

class Product(models.Model): 
    ... 

nhằm/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) 
    ... 

Bây giờ, khi tôi tải một thứ tự thông qua các API tôi muốn để có được những sản phẩm liên quan là tốt, vì vậy tôi cố gắng này (với django-tastypie):

Nhằm/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' 

mà cho tôi thông báo lỗi này: "đối tượng 'sản phẩm' không có thuộc tính 'trật tự'". Vì vậy, tôi không chắc chắn những gì sai hoặc thiếu, nó có thể đòi hỏi một cái gì đó trong tài nguyên sản phẩm của tôi là tốt, nhưng tôi đã thử một số cách mà không thành công. Bất kỳ trợ giúp sẽ được chào đón :)

Trả lời

2

Vấn đề là với dòng này:

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

Lỗi này là khá thẳng về phía trước. Product thực sự không có thuộc tính có tên order. Bảng tham gia OrderProduct của bạn, nhưng M2M của bạn không trả lại OrderProduct s nó trả về Product s.

+0

Tôi có lẽ vẫn còn thiếu một cái gì đó nhưng tôi không thấy những gì lĩnh vực ToOneField là vụ phải sử dụng hoặc những gì M2M là nghĩa vụ phải trở về? – djevg

+0

Bạn cần một 'ProductResource' không phải là một' OrderProductResource'. Đó là vấn đề của bạn. Nó giống như thiết lập M2M trên chính mô hình đó. Bạn không làm 'mô hình.ManyToManyField (OrderProduct)'; bạn làm 'mô hình.ManyToManyField (Sản phẩm)'. Nó giống nhau ở đây, bạn tạo 'ToManyField' của bạn với một liên kết đến' ProductResource' trả về 'Product's. –

+0

Ok, hiểu rồi;) Vì một số lý do, tôi nghĩ tôi phải xác định lại toàn bộ mối quan hệ trong API nhưng thông minh hơn thế ... Cảm ơn sự giúp đỡ của bạn. – djevg

Các vấn đề liên quan