第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 django-rest-framework 的序列化程序中使用時區(qū)序列化時間?

如何在 django-rest-framework 的序列化程序中使用時區(qū)序列化時間?

胡說叔叔 2023-06-13 17:07:32
我有一個 Django 模型:class Clinic(models.Model):    NAME_MAX_LENGTH = 150    name = models.CharField(max_length=NAME_MAX_LENGTH,blank=False,null=False)    start_at = models.DateTimeField(blank=False,default=timezone.now)客戶端將 start_at 字段作為帶有時區(qū)的時間字段發(fā)送{ start_at : "12:40:10+04:30"} 我想將此時間字段轉(zhuǎn)換為以當(dāng)前日期為日期的 DateTimeField,然后將其作為時區(qū)感知 DateTimeField 保存到數(shù)據(jù)庫中。我想序列化此字段并從輸入中提取時區(qū)信息,然后創(chuàng)建我的 DateTimeField 對象。我如何在 rest_framework 序列化程序中執(zhí)行此操作?
查看完整描述

1 回答

?
隔江千里

TA貢獻1906條經(jīng)驗 獲得超10個贊

您可以為此創(chuàng)建一個自定義序列化程序字段:


import datetime


from django.utils import timezone


from rest_framework import serializers

from rest_framework.fields import Field



class TimeWithTimezoneField(Field):


    default_error_messages = {

        'invalid': 'Time has wrong format, expecting %H:%M:%S%z.',

    }


    def __init__(self, *args, **kwargs):

        super().__init__(*args, **kwargs)


    def to_internal_value(self, value):

        value_with_date = datetime.datetime.now().strftime('%Y-%m-%d') + ' ' + value

        try:

            parsed = datetime.datetime.strptime(value_with_date, '%Y-%m-%d %H:%M:%S%z')

        except (ValueError, TypeError) as e:

            pass

        else:

            return parsed

        self.fail('invalid')


    def to_representation(self, value):

        if not value:

            return None


        if isinstance(value, str):

            return value


        return timezone.make_naive(value, timezone.utc).strftime("%H:%M:%S+00:00")



class ClinicSerializer(serializers.ModelSerializer):


    start_at = TimeWithTimezoneField()


    class Meta:

        model = Clinic

        fields = [

            'id',

            'name',

            'start_at',

        ]


對于您的示例,start_at: 12:40:10+04:30將存儲為時區(qū)感知日期時間(UTC : 08:40:10+00:00)


查看完整回答
反對 回復(fù) 2023-06-13
  • 1 回答
  • 0 關(guān)注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號