Какой способ сериализации пользовательского класса? - PullRequest
0 голосов
/ 05 сентября 2011

Что должен реализовать пользовательский класс, если я хочу его сериализовать?В моем случае я хочу сериализовать список с именем

comment_with_vote = []

, элементы которого являются объектами, определенными следующим образом.

class CommentWithVote(object):
    def __init__(self, comment, vote):
        self.comment = comment
        self.vote = vote # vote=1 is_up,vote=0 is_down,vote=2 no vote

комментарий - это модель django.

serializers.serialize('json', comment_with_vote, ensure_ascii=False)

возвращает AttributeError: объект 'CommentWithVote' не имеет атрибута '_meta'

json.dumps(comment_with_vote, ensure_ascii=False)

возвращает TypeError: <... CommentWithVote объект в 0x046ED930> не является сериализуемым JSON

1 Ответ

0 голосов
/ 07 сентября 2011

serializers.serialize только для моделей Django, а ваш класс не является моделью - он просто содержит ссылку на одну из них. И, к сожалению, json.dumps не знает ни о моделях, ни о классе вашего контейнера.

Я бы подошел к этому по-другому. Вместо того, чтобы иметь отдельный класс CommentWithVote, я бы просто пометил голоса на стандартный комментарий. Сериализаторы все еще не будут знать об атрибуте голосования, поскольку это не поле, но вы можете сделать это: сериализовать в стандартный словарь Python, добавить голосование, а затем преобразовать в JSON.

comment_list = serializers.serialize('python', comments)
for comment in comments:
    comment['fields']['vote'] = calculate_vote()
comment_json = json.dumps(comments)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...