【问题标题】:customising a model field for serialization自定义模型字段以进行序列化
【发布时间】:2015-05-26 10:58:21
【问题描述】:

我正在 django 上做一个项目。我有一个模型 EmployeeProfile 有几个领域以及带有以下数据的领域教育 - (学院,年份,课程,描述)。 在模型中,我以分隔字段的形式存储数据。 例如教育的样本值 - “XYZ 学院 | 1994 | Btech | blabla”

但我想将它与 dict 表单中的其他字段一起序列化,即

{ education:{ year: '1994', course: ' Btech', college: ' XYZ ', description: 'blabla'}}

将来我还想将它用作由';'分隔的数组 但现在不一定需要。

我是 django restframework 的新手...

【问题讨论】:

    标签: django-models django-rest-framework


    【解决方案1】:

    首先,您可以使用 split 拆分教育字段值。 然后就可以进行相应的序列化了。

    class CustomModel:
        def __init__(self, year,course,college,description):
            self.year = year
            self.course = course
            self.description = description
            self.college = college
    
    class CustomSerializer(NonNullSerializer):
    
        year = serializers.IntegerField()
        course = serializers.CharField()
        description = serializers.CharField()
        college = serializers.CharField()
    

    在 view.py 中添加这个

        education_value = ...
        year,course,college,description = education_value.split('|')
        education_obj = CustomModel(year=year,course=course,college=college,description=description)
        serialized_data = CustomSerializer(education_obj)
        return serialized_data.data
    

    希望对你有帮助

    【讨论】:

    • 很好。但是我有一个疑问。将上面的 CustomModel 类也将保存为数据库中的表还是只是为了帮助简化序列化?如果我想在其他模型序列化器中使用 CustomSerializer 类,那么我必须让它嵌套对吗?
    • 只是为了方便序列化,不会创建为数据库表。它只是一个类,用于制作特定类型的对象作为序列化器的输入,这里是CustomSerializer。只有在继承类 models.Model 时才会创建 Db 表。我没有完全理解问题的最后一部分。
    • 我的意思是假设我有一个模型“个人资料”,它具有现场教育价值。现在,如果我将使用 List 或 Detail 视图序列对其进行序列化,如何在其中包含此自定义序列化器,以便它不采用原始教育值表示,而是采用上述自定义表示。
    • views.py 中的代码可以使用它,将序列化器显式分配给education_value。您也不能在模型序列化程序中使用它,但可以用作 serializer.Serializer 类中的字段。序列化程序代码 ::: class ProfileSerializer(serializer.Serializer): education = CustomSerializer() 其他字段类似。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2014-07-21
    相关资源
    最近更新 更多