2015-10-25 25 views
0

我是django和tastypie的新手。我想加入兩個模型,它們是order和order_item,根據訂單ID從它們兩個獲取數據。我從幾個來源引用,但仍未在這兩種模型中顯示數據。Django Tastypie:加入兩個模型

訂購的型號:

user = models.ForeignKey(USER_MODEL, blank=True, null=True, 
      verbose_name=_('User')) 
    status = models.IntegerField(choices=STATUS_CODES, default=PROCESSING, 
      verbose_name=_('Status')) 
    order_subtotal = CurrencyField(verbose_name=_('Order subtotal')) 
    order_total = CurrencyField(verbose_name=_('Order Total')) 
    shipping_address_text = models.TextField(_('Shipping address'), blank=True, 
     null=True) 
    billing_address_text = models.TextField(_('Billing address'), blank=True, 
     null=True) 
    created = models.DateTimeField(auto_now_add=True, 
      verbose_name=_('Created')) 
    modified = models.DateTimeField(auto_now=True, 
      verbose_name=_('Updated')) 
    cart_pk = models.PositiveIntegerField(_('Cart primary key'), blank=True, null=True) 
    userid_consgeo = models.TextField(blank=True, null=True) 
    cartid_consgeo = models.TextField(blank=True, null=True) 

OrderItem的的型號:

order = models.ForeignKey(get_model_string('Order'), related_name='items', 
      verbose_name=_('Order')) 
    layer_reference = models.CharField(max_length=255, 
      verbose_name=_('Layer reference')) 
    layer_name = models.CharField(max_length=255, null=True, blank=True, 
      verbose_name=_('Layer name')) 
    layer = models.ForeignKey((ResourceBase), 
      null=True, blank=True, **f_kwargs) 
    unit_price = CurrencyField(verbose_name=_('Unit price')) 
    quantity = models.DecimalField(verbose_name=_('Quantity'), default=0.00, max_digits=12, decimal_places=2) 
    line_subtotal = CurrencyField(verbose_name=_('Line subtotal')) 
    line_total = CurrencyField(verbose_name=_('Line total')) 

我的資源:

class OrderItemResources(ModelResource): 
    order_id = fields.CharField(attribute='order_id') 
    layer_id = fields.CharField(attribute='layer_id') 
    all_order = fields.ToManyField('resources.JoinOrderResources', 'all_order_set', related_name = 'all_order', full=True) 

    class Meta: 
     queryset = OrderItem.objects.all() 
     resource_name = 'order_item' 

     filtering = { 
      "layer_id": ALL_WITH_RELATIONS, 
      "order_id": ALL_WITH_RELATIONS, 
     } 

class JoinOrderResources(ModelResource): 
    id = fields.CharField(attribute='id') 
    user = fields.CharField(attribute='user') 
    order_id = fields.ForeignKey(OrderItemResources, 'order_item', full=True, null=True) 
    class Meta: 
     queryset = Order.objects.all() 
     resource_name = 'all_order' 
     list_allowed_methods = ['get'] 
     authorization = Authorization() 

     filtering = { 
      "id": ALL, 
      "user": ALL_WITH_RELATIONS, 
     } 

回答

0

你在你的OrderItem的,型號設置related_name='items'。所以你想要做的是:

class OrderResource(ModelResource): 
    id = fields.CharField(attribute='id') 
    user = fields.CharField(attribute='user') 
    # order_id = fields.ForeignKey(OrderItemResources, 'order_item', full=True, null=True) 
    items = fields.ToManyField(OrderItemResources, 'items', full=True, null=True) 


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

    filtering = { 
     "id": ALL, 
     "user": ALL_WITH_RELATIONS, 
    } 
+0

tq Remi..it的工作..解決我的問題.. – nuriffah