From dc5f7a5c054beca85de8ebec4f7ef939ce57f039 Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Thu, 20 Apr 2023 11:14:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=B5=84=E4=BA=A7=20=E5=85=8B=E9=9A=86?= =?UTF-8?q?=E6=9C=89=E5=88=87=E6=8D=A2=E8=87=B3=E7=9A=84=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?400=20(#10266)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: feng <1304903146@qq.com> --- apps/common/serializers/fields.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/common/serializers/fields.py b/apps/common/serializers/fields.py index e8a350023..0b1e7040c 100644 --- a/apps/common/serializers/fields.py +++ b/apps/common/serializers/fields.py @@ -2,6 +2,7 @@ # import phonenumbers from django.core.exceptions import ObjectDoesNotExist +from django.db.models import Model from django.utils.translation import gettext_lazy as _ from rest_framework import serializers from rest_framework.fields import ChoiceField, empty @@ -118,11 +119,15 @@ class ObjectRelatedField(serializers.RelatedField): return data def to_internal_value(self, data): + queryset = self.get_queryset() + if isinstance(data, Model): + return queryset.get(pk=data.pk) + if not isinstance(data, dict): pk = data else: pk = data.get("id") or data.get("pk") or data.get(self.attrs[0]) - queryset = self.get_queryset() + try: if isinstance(data, bool): raise TypeError