我有一个问题,无论如何我都无法解决。
我想要的只是从 api/epg 获取在现在和 2 小时后的范围内有节目的 channel 。我以某种方式获得了所有节目的所有 channel ,而不是时间范围内的任何内容。
我做错了什么?
谢谢
模型.py
class Channels(models.Model):
sort_order = models.IntegerField()
name = models.CharField(max_length=200)
def __unicode__(self):
return self.name
class Events(models.Model):
event_id = models.CharField(max_length=200, primary_key=True)
channel = models.ForeignKey('Channels', related_name='events')
start_time = models.DateTimeField( blank=True, null = True)
end_time = models.DateTimeField( blank=True, null = True)
def __unicode__(self):
return self.title
API.py
class EPGResource(ModelResource):
events= fields.ToManyField('xyz.api.EventResource','events', full=True)
class Meta:
now = datetime.now()
later = now + timedelta(hours=2)
queryset = Channels.objects.filter(events__start_time__range(now,later)).order_by('sort_order')
resource_name = 'epg'
filtering = {
"start_time" : ['exact', 'range'],
"name" : ['exact', 'range'],
"events" : ['exact', 'range'],
"channels": ALL_WITH_RELATIONS,
}
class EventResource(ModelResource):
class Meta:
queryset = Events.objects.all()
resource_name = 'events'
filtering = {
"start_time" : ['exact', 'range'],
"genre" : ['exact', 'range'],
"channel": ALL_WITH_RELATIONS,
}
最佳答案
不幸的是,您将需要在 get_object_list
中进行过滤,因为 tastypie 资源不是在运行时构建的:
class EPGResource(ModelResource):
events= fields.ToManyField('xyz.api.EventResource','events', full=True)
class Meta:
now = datetime.now()
later = now + timedelta(hours=2)
queryset = Channels.objects.all()
resource_name = 'epg'
filtering = {
"start_time" : ['exact', 'range'],
"name" : ['exact', 'range'],
"events" : ['exact', 'range'],
"channels": ALL_WITH_RELATIONS,
}
def get_object_list(self, request):
now = datetime.now()
later = now + timedelta(hours=2)
return super(EPGResource, self).get_object_list(request).filter(events__start_time__range(now,later)).order_by('sort_order')
关于python - tastypie 过滤外键相关资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14132227/