Django RestFramework-常用序列化

序列化

  • Example Model
class Contract(BaseModel):
    """ 续保合同表 """
    contract_type = (
        ('renewal', '续保'),
        ('purchase', '采购'),
        ('lease', '租赁')
    )
    status_type = (
        ('flow', '审批中'),
        ('done', '已完成'),
    )
    name = models.CharField(max_length=64, verbose_name='合同名称')
    type = models.CharField(choices=contract_type, max_length=32, default='renewal', verbose_name='合同类型')
    supplier = models.ForeignKey(Supplier, on_delete=models.SET_NULL, null=True, blank=False, verbose_name="供应商")
    start_date = models.DateTimeField(null=True, blank=True, verbose_name="合同开始时间")
    end_date = models.DateTimeField(null=True, blank=True, verbose_name="合同结束时间")
    detail = jsonfield.JSONField(verbose_name="详情JSON")
    owner = models.ForeignKey(Users, on_delete=models.SET_NULL, null=True, blank=False, verbose_name="负责人")
    status = models.CharField(choices=status_type, max_length=32, default='flow', verbose_name='合同状态')
    contract_path = models.CharField(max_length=128, blank=True, null=True, verbose_name="合同访问路径")

    class Meta:
        verbose_name_plural = '合同表'

    def __str__(self):
        return "%s-%s" % (self.name, self.type)

显示 ForeignKey, choices, 日期

class ContractSerializer(serializers.ModelSerializer):
    """
    合同
    """
    # 日期
    create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True)
    start_date = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True)
    end_date = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True)
    # ForeignKey
    display_owner = serializers.ReadOnlyField(source="owner.name")
    display_supplier = serializers.ReadOnlyField(source="supplier.name")
    # choices
    display_status = serializers.ReadOnlyField(source="get_status_display")

    class Meta:
        model = Contract
        fields = '__all__'

自定义字段

class ContractSerializer(serializers.ModelSerializer):
    # 自定义返回时间
    operating_time = serializers.SerializerMethodField()

    class Meta:
        model = Contract
        fields = '__all__'

    # 自定义详情返回
    def get_operating_time(self, obj):
        if obj.start_date:
            print(obj.start_date)
            return [obj.start_date.strftime('%Y-%m-%d %H:%M:%S'), obj.end_date.strftime('%Y-%m-%d %H:%M:%S')]
        return None
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值