python - tastypie 过滤外键相关资源

标签 python django foreign-key-relationship tastypie

我有一个问题,无论如何我都无法解决。

我想要的只是从 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/

相关文章:

python - Python 的 ctypes.c_long 在 64 位系统上是 64 位的吗?

python - 从系列中选择一项并保留索引

python - 如何在基于 Django websockets 的实时聊天机器人中向 PostgreSQL 添加数据?

Python 在 dict 中使用 %s 来调用 value

python - 使用 inferred_freq 设置 pandas.tseries.index.DatetimeIndex.freq

python - Django-Filter:为 bool 字段创建复选框

python - 命名变量,最佳约定

sql - 在 SQL Server Management Studio 中创建外键

mysql - SQL 表关系 - 尝试避免循环关系

mysql - Rails + Postgres 与自定义外键的关系问题