2013-12-20 4 views
1

У меня есть две модели продукта и CartItem:Джанго TastyPie ForeignKey полный = правда не работает

#product models.py 
class Product(models.Model): 
    objects = ProductManger() 
    name = models.CharField(max_length=200) 
    brand_name = models.CharField(max_length=100) 
    description = models.TextField() 

#CartItem models.py 
class CartItem(models.Model): 
    objects = CartItemManager() 
    cart = models.ForeignKey(Cart) 
    product = models.ForeignKey(Product) 
    quantity = models.PositiveSmallIntegerField(blank=True, null=True, default=1) 

Я хочу, чтобы все cartitems за тележкой, для этого в api.py (tastypie) У меня есть следующие:

class CartItemRelatedResource(ModelResource): 

    class Meta: 
     queryset = Product.objects.all() 
     resource_name = 'item_product' 
     allowed_methods = ['get'] 
     include_resource_uri = False  
     authentication = SessionAuthentication() 

class CartItemResource(ModelResource): 
    product = fields.ForeignKey(CartItemRelatedResource, 'product', full=True) 

    class Meta: 
     queryset = CartItem.objects.all() 
     resource_name = 'cart_item' 
     excludes = ['modification_date'] 
     allowed_methods = ['post', 'get', 'delete'] 
     authentication = SessionAuthentication() 

    def get_cart_items(self, request, **kwargs): 
     self.method_check(request, allowed=['get']) 
     self.is_authenticated(request) 
     cart_id = request.GET.get('id', '') 
     items = CartItem.objects.filter(cart__exact = cart_id) 
     data = serializers.serialize('json', items) 
     return HttpResponse(data, mimetype='application/json') 

Но когда я get_cart_items, реакция имеет рк продукта, он не имеет название продукта или описание. Я также хочу получить имя продукта в ответе. Из того, что я прочитал, full = true - лучшее решение (с минимальными запросами, потому что тележка может иметь несколько элементов корзины).

ответ

1

Ваша версия get_cart_items() не использует код Tastypie для извлечения, поэтому full = True не работает.

full=True будет работать, если вы используете обработчики по умолчанию Tastypie для получения данных. Вам не нужно писать свой собственный get_cart_items().

+0

спасибо за ваш ответ. Должен ли я использовать 'def obj_get_list (self, bundle, ** kwargs): cart_id = request.GET.get ('cart_id') ...' – reevh

+0

Я не совсем понимаю, что вы пытаетесь сделать, но в в общем случае вам вообще не нужно писать какой-либо код, просто используйте URL-адрес tashypie по умолчанию. – dragonx

+0

Я хотел был бы иметь url как/api/cart_item/cart /? Id = 1 против/api/cart_item/cart /? Cart__id = id. Я попробую с более поздним, и если это сработает, мы ответим на ваш ответ. Спасибо за вашу помощь. Я новичок в django-tastypie :) – reevh

Смежные вопросы