0

私はtastypie APIを使用してDjangoアプリに取り組んでいます。基本的にオブジェクトを作成し、日付でフィルタリングして、どのオブジェクトが新しいかを知りたいです(「その日付から今日までのすべてのオブジェクトを教えてください」のような)。それが重要かどうかはわかりませんが(重要だと思います)、mongoDBを使用しています。

私が苦労して ?&published__gte=2013-02-01 いるのは、単純に、日付でフィルタリングする最も論理的な方法は何ですか? 私は私に精度を尋ねることを躊躇しないでください。

これが私のモデルです:

class Object(models.Model):

    name = models.CharField(max_length=200)
    published = models.DateTimeField('date published')

ここに私のリソースがあります:

class ObjectResource(ModelResource):

    class Meta:
        queryset = Object.objects.all()
        resource_name = 'object'
        filtering = {
            "published": ['gte', 'lte', 'exact'],
            }

    def build_filters(self, filters=None):
        if filters is None:
            filters = {}
        orm_filters = super(Object, self).build_filters(filters)

        if('published' in filters):
            published = filters['published']
            # need to do some modifications on the date format here i guess
            qset = (Q(published=published))
            orm_filters.update({'from': qset})

            return orm_filters

    def apply_filters(self, request, applicable_filters):
        if 'from' in applicable_filters:
            from_ = applicable_filters.pop('from')
        else:
            from_ = None

        semi_filtered = super(ObjectResource, self).apply_filters(request, applicable_filters)

        return semi_filtered.filter(from_) if from_ else semi_filtered

アップデート

build_filter を次のように変更しました。

if('published' in filters):
    published = filters['published']
    qset = (Q(published=published) | 
            Q(published__lte=published) |
            Q(published__gte=published))
    orm_filters.update({'from': qset})
    return orm_filters

次のエラーが表示されます。argument of type 'NoneType' is not iterable

したがって、フィルタリングすると結果が得られないと思います。おそらく日付形式に違いはありますか?

4

1 に答える 1

1

メソッドをオーバーライドせずにクエリが機能するはずです。

class ObjectResource(ModelResource):

class Meta:
    queryset = Object.objects.all()
    resource_name = 'object'
    filtering = {
        "published": ['gte', 'lte', 'exact'],
        }
link: .../api/v1/object/?format=json&published__gte=2012-02-18&published__lte=2013-02-24
于 2013-02-26T23:32:45.703 に答える