代码之家  ›  专栏  ›  技术社区  ›  David Schumann Axnyff

如何使用django rest Framework序列化程序将nullable字段设置为None

  •  0
  • David Schumann Axnyff  · 技术社区  · 7 年前

    我有一个简单的视图,我想用它设置一个可为null的 TimeField 至无:

    class Device(models.Model):
        alarm_push = models.TimeField(null=True, blank=True)
    
    class DeviceSettingsSerializer(serializers.ModelSerializer):
        class Meta:
            model = Device
            fields = ('alarm_push',)
    
    
    class DeviceSettingsView(RetrieveUpdateAPIView):
        serializer_class = DeviceSettingsSerializer
        lookup_field = 'uuid'
    
        def get_queryset(self):
            return Device.objects.all()
    

    但如果我尝试修补数据,如 {'alarm_push': None} 我得到一个错误,比如 {"alarm_push":["Time has wrong format. Use one of these formats instead: hh:mm[:ss[.uuuuuu]]."]}

    如何设置 alarm_push 没有?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Johannes Reichard    7 年前

    由于序列化程序是ModelSerializer,DRF将使用 TimeField() 为了您的 alarm_push 模型属性。当您签出DRF时间域的源代码时 https://github.com/encode/django-rest-framework/blob/master/rest_framework/fields.py#L1278 to_internal_value 在每次解析值的尝试都失败时引发错误。

    因此,要让你的时间域为空,你应该修补 {"alarm_push": ""} 用空字符串表示空状态。