在django rest_framework中组合SerializerMethodField和DateField

时间:2016-02-07 10:59:24

标签: python django django-rest-framework

我是django和rest框架的新手。我有这个事件序列化器,在其中我想返回本地化日期。但是在更新事件时我想使用日期验证。所以基本上我想在提取时组合SerializerMethodField,在保存/更新时组合DateField验证。谢谢

from rest_framework import serializers
from account.models import Events

import main.helpers as helpers

class EventsSerializer(serializers.ModelSerializer):
    title = serializers.CharField(required=True, max_length=200)
    url = serializers.CharField(required=False, max_length=100)
    allDay = serializers.BooleanField(required=False)
    # start = serializers.DateField(format=None, input_formats=None)
    # end = serializers.DateField(format=None, input_formats=None)
    start = serializers.SerializerMethodField('get_start_local')
    end = serializers.SerializerMethodField('get_end_local')
    def get_start_local(self, obj):
        return helpers.utcToLocal(obj.start)
    def get_end_local(self, obj):
        return helpers.utcToLocal(obj.end)
    class Meta:
        model = Events
        fields = ('id', 'title', 'url', 'allDay', 'published', 'start', 'end')
        # fields = ('id', 'title', 'url', 'allDay', 'published', 'start', 'start_local', 'end', 'end_local')

1 个答案:

答案 0 :(得分:0)

要显示格式化日期,您可以使用以下结构:

start = serializers.DateField(format='%m-%d-%Y', input_formats=['%m-%d-%Y'], source='created')

我认为你不能以这种方式处理序列化器字段和序列化器方法字段。如果您无法通过input_formats实现所需,我认为您可以在视图中覆盖POST方法,并更新传递给序列化程序的数据。