gpt4 book ai didi

python - 在 DRF 3 中的 ModelSerializer 上添加非模型字段

转载 作者:IT老高 更新时间:2023-10-28 22:20:42 25 4
gpt4 key购买 nike

如何在 DRF 3 中的 ModelSerializer 上添加非模型字段?即添加一个在我的实际模型中不存在的字段?

class TestSerializer(serializers.ModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='vote_detail')
non_field = serializers.CharField() # no corresponding model property.


class Meta:
model = vote_model
fields = ("url", "non_field")

def create(self, validated_data):
print(direction=validated_data['non_field'])

但是 DRF 3 给了我错误:

Got AttributeError when attempting to get a value for field `non_field` on serializer `TestSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Test` instance.
Original exception text was: 'Test' object has no attribute 'non_field'.

我已搜索堆栈 DRF - ModelSerializer with a non-model write_only field并找到了一些解决方案,但这些是指我使用 DRF 3 的 DRF 2。这个版本有解决方案吗?

最佳答案

class MySerializer(serializers.ModelSerializer):
write_only_char_field = serializers.CharField(write_only=True)
write_only_list_char_field = serializers.ListField(child=serializers.CharField(max_length=100, default=''), write_only=True)
empty_method_field = serializers.SerializerMethodField()
read_only_custom_model_field = serializers.CharField(source='custom_property', read_only=True)

def create(self, validated_data):
validated_data.pop('write_only_char_field', None)
validated_data.pop('write_only_list_char_field', None)
return super().create(validated_data)

serializers.CharField(write_only=True)serializers.ListField(...) 是为您的 .create 提供额外数据的好解决方案().update() 方法,作为单个字符串或字符串列表(您可以将 ListField 与其他序列化器字段类型混合使用)。< br/>使用这种方法,你还可以定义 def validate_write_only_char_field 来实现一些快速简单的验证。

serializers.SerializerMethodField() 允许您从序列化器上定义的方法向序列化器输出添加一些自定义只读字段。

read_only_custom_model_field 将使用模型上的方法来读取一些数据,而不是严格意义上的模型字段,而是自定义方法。即

class MyModel(models.Model):
my_field = models.CharField(max_length=100)

@property
def custom_property(self):
return "Perform calculations, combine with related models, etc. etc."

关于python - 在 DRF 3 中的 ModelSerializer 上添加非模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30597964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com