2

とにかく本当に解決できない問題があります。

私が望むのは、api/epg から、現在と 2 時間後の範囲に番組があるチャンネルを取得することだけです。どういうわけか、時間範囲内のものではなく、すべての番組ですべてのチャンネルを取得します。

私は何を間違っていますか?

ありがとう

models.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,
        }
4

1 に答える 1

0

残念ながら、get_object_listtastypie リソースは実行時にビルドされないため、そのフィルターを実行する必要があります。

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')
于 2013-01-03T04:00:38.237 に答える