поля и исключить в вкусненьком - PullRequest
4 голосов
/ 23 марта 2012

Я хотел бы включить некоторые поля в ответ GET и включить меньшее подмножество полей в ответ подтверждения POST. Мне нужно иметь много del bundle ['field1'], del bundle ['field2'] в alter_detail_data_to_serialize для достижения этой цели. Есть ли какой-нибудь общий способ указать поля и исключить их для каждого типа запроса в моем ресурсе?

1 Ответ

5 голосов
/ 17 апреля 2012

Я просмотрел источник Tastypie, и мой вывод следующий ...

Вы можете попытаться использовать свой ресурс и изменить значение атрибута excludes на лету, когда метод POST, но это будет сложно и, что самое важное, взломать.

Поэтому я полагаю, что вам лучше всего делать то, что вы делаете, но, возможно, вместо нескольких del bundle[ 'field' ] введите атрибут post_excludes или что-то подобное и реализуйте более удобный и гибкий способ избавиться от этих полей. , Например, вы можете сделать что-то вроде этого:

class YourResource( Resource ):

    class Meta:
        # ...
        post_excludes = [ 'foo', 'bar' ]
        # ...

    # ...

    def alter_detail_data_to_serialize( self, request, data ):
        if request.method == 'POST':
            data.data = { 
                key : value for key, value in data.data.copy().iteritems() if \
                key not in self._meta.post_excludes }
        return data

    # ...

Это было бы чище и соответствовало бы "правилам" Tastypie, что важно, чтобы не заканчиваться запутанным, взломанным кодом, который трудно поддерживать.

Надеюсь, это поможет:)

...