gpt4 book ai didi

django - 使 BooleanField 在 Django Rest Framework 中成为必需

转载 作者:行者123 更新时间:2023-12-04 20:45:36 25 4
gpt4 key购买 nike

我有一个带有 bool 字段的模型,我想用 Django rest 框架反序列化它,我希望序列化程序在 post 请求中缺少一个字段时发出提示。然而,它没有。它默默地将丢失的 bool 值解释为 False。

class UserProfile(models.Model):
"""
Message between two users
"""
user = models.OneToOneField(User, verbose_name="django authentication user", related_name='user_profile')
newsletter = models.BooleanField(null=False)
research = models.BooleanField(null=False)

该模型是使用 Serialiser 创建的,如下所示:
 class UserProfileSerializer(serializers.ModelSerializer):
research = BooleanField(source='research', required=True)
newsletter = BooleanField(source='newsletter', required=True)

class Meta:
model = UserProfile
fields = ('research', 'newsletter')

在我看来,我也在创建一个用户,所以我有一些手动步骤:
 def post(self, request, format=None):
userprofile_serializer = UserProfileSerializer(data=request.DATA)
reg_serializer = RegistrationSerializer(data=request.DATA)
phone_serializer = PhoneSerializer(data=request.DATA)


errors = {}
if userprofile_serializer.is_valid() and reg_serializer.is_valid() and phone_serializer.is_valid():
user = reg_serializer.save()
data = reg_serializer.data

user_profile = userprofile_serializer.object
user_profile.user = user
userprofile_serializer.save()

return Response(data, status=status.HTTP_201_CREATED)

errors.update(reg_serializer.errors)
# ...
return Response(errors, status=status.HTTP_400_BAD_REQUEST)

但是,以下测试用例失败了,因为其余框架不会提示缺少参数,而是在 from_native 中插入 False
     def test_error_missing_flag(self):
data = {'username': "test", 'password': "123test", 'email': 'test@me.com',
'newsletter': 'true', 'uuid': self.uuid}

response = self.client.post(reverse('app_register'), data)
# should complain that 'research' is not found
self.assertTrue('research' in response.data)

如果我用序列化程序按预期失败的整数字段替换我的“研究”字段。有任何想法吗?

最佳答案

bool 字段和 required 存在问题争论。现在应该在 master 中修复。

看到这个问题:https://github.com/tomchristie/django-rest-framework/issues/1004

关于django - 使 BooleanField 在 Django Rest Framework 中成为必需,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18465908/

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