gpt4 book ai didi

django - django rest 框架中的只写、只读字段

转载 作者:行者123 更新时间:2023-11-28 19:34:01 25 4
gpt4 key购买 nike

我有这样的模型:

class ModelA(models.Model):
name = models.CharField()


class ModelB(models.Model):
f1 = models.CharField()
model_a = models.ForeignKey(ModelA)

序列化器:

class ASerializer(serializers.ModelSerializer):
model_b_ids = serializers.CharField()
class Meta:
model = ModelA
write_only_fields = ('model_b_ids',)

观看次数:

class AView(CreateModelMixin, GenericViewSet):

def perform_create(self, serializer):
model_b_ids = parse_somehow(serializer.validated_data["model_b_ids"])
#do something...

我遇到的问题是“model_b_ids”

用户应在发送post数据时提交。

我在 perform_create 中使用它来链接到相关模型。

但这不是 ModelA 中的“真实列”,因此当我尝试保存它时会引发异常。

我尝试从 validated_data 中弹出它,但随后又在某处出现无法从模型中读取 model_b_ids 的错误。关于正确使用这种字段的任何想法?

最佳答案

Django Rest Framework 不再有 Meta 属性 write_only_fields

根据他们的 docs 你在 extra_kwargs 中设置了只写字段

例如

class UserSerializer(ModelSerializer):
"""
``Serializer`` for ``User`` ..
"""

class Meta:
model = User
fields = ('id', 'email', 'first_name', 'last_name' ,'security_question', 'security_question_answer', 'password', 'is_active', 'is_staff')
read_only_fields = ('is_active', 'is_staff')
extra_kwargs = {
'security_question': {'write_only': True},
'security_question_answer': {'write_only': True},
'password': {'write_only': True}
}

更新

正如@AKHIL MATHEW 在下面的回答中强调的那样

从 DRF v3 开始,将字段设置为只读或只写可以使用序列化器字段核心参数,如下所示。

write_only

Set this to True to ensure that the field may be used when updating or creating an instance, but is not included when serializing the representation.

默认为假例如:

company = serializers.PrimaryKeyRelatedField(write_only=True)

关于django - django rest 框架中的只写、只读字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34989915/

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