2014-02-20 16 views
0

編輯:這種方法確實有效,我有一個錯字。謝謝@eran指出,在下面修正。如何用django-tastypie查詢ToManyField的屬性

在控制檯我可以這樣做:

Performance.objects.filter(ticket_blocks__price__gt=200) 

和獲取具有價格高於$ 200門票塊表演。但是這個:

http://localhost:8000/api/v1/performance/?ticket_blocks__price__gt=200 

給我KeyError: u'price'。我究竟做錯了什麼?

models.py

class TicketBlock(models.Model): 
    name = models.CharField(max_length=100) 
    price = models.DecimalField(max_digits=8, decimal_places=2) 

class Performance(models.Model): 
    start_time = models.DateTimeField(db_index=True) 
    end_time = models.DateTimeField(default=None, blank=True, null=True) 
    sold_out = models.BooleanField(default=False) 

    # All performance have at least one ticket block 
    ticket_blocks = models.ManyToManyField('TicketBlock') 

api.py

class TicketBlockResource(ModelResource): 
    class Meta: 
     queryset = TicketBlock.objects.all() 
     allowed_methods = ['get'] 
     resource_name = 'ticket-block' 
     filtering = { 
      'price': ALL 
     } 

class PerformanceResource(ModelResource): 
    ticket_blocks = fields.ToManyField(TicketBlockResource, 'ticket_blocks', blank=True, null=True, full=True) 

    class Meta: 
     queryset = Performance.objects.all() 
     allowed_methods = ['get'] 
     resource_name = 'performance' 
     filtering = { 
      'ticket_blocks': ALL_WITH_RELATIONS 
     } 

回答

0

它應該工作,我認爲你只是在定義混亂,使用了錯誤的模型,而不是VenueType的TicketBlock

更換線

queryset = VenueType.objects.all() 

要TicketBlock.objects.all(),我認爲它會解決您的問題。

相關問題