django-rest-framework如何使模型序列化器字段成为必需

时间:2015-06-20 11:31:55

标签: python angularjs django django-rest-framework

我有一个模型,我正在逐步填写,这意味着我正在制作一个表单向导。

因为这个模型中的大多数字段都是必需的,但是null=True, blank=True可以避免在提交部分数据时引发非空错误。

我正在使用Angular.js和django-rest-framework,我需要告诉api x和y字段应该是必需的,如果它们是空的,它需要返回验证错误。

6 个答案:

答案 0 :(得分:27)

根据文档here的最佳选择是在Meta类中使用extra_kwargs,例如,您有UserProfile模型存储电话号码并且是必需的

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ('phone_number',)
        extra_kwargs = {'phone_number': {'required': True}} 

答案 1 :(得分:8)

您需要专门覆盖该字段并添加自己的验证器。您可以在此处阅读更多详细信息http://www.django-rest-framework.org/api-guide/serializers/#specifying-fields-explicitly。这是示例代码。

def required(value):
    if value is None:
        raise serializers.ValidationError('This field is required')

class GameRecord(serializers.ModelSerializer):
    score = IntegerField(validators=[required])

    class Meta:
        model = Game

答案 2 :(得分:6)

这是我对多个领域的方式。它基于重写UniqueTogetherValidator。

replace: true

用法:

replace: true

答案 3 :(得分:3)

这在我的后端应用上运行良好。

class SignupSerializer(serializers.ModelSerializer):
        """ Serializer User Signup """
        class Meta:
            model = User
            fields = ['username', 'password', 'password', 'first_name', 'last_name', 'email']
            
            extra_kwargs = {'first_name': {'required': True, 'allow_blank': False}}
            extra_kwargs = {'last_name': {'required': True,'allow_blank': False}}
            extra_kwargs = {'email': {'required': True,'allow_blank': False}}

答案 4 :(得分:1)

如果您使用的是CharField,则另一种选择是使用requiredtrim_whitespace

class CustomObjectSerializer(serializers.Serializer):
    name = serializers.CharField(required=True, trim_whitespace=True)

required doc:http://www.django-rest-framework.org/api-guide/fields/#required trim_whitespace doc:http://www.django-rest-framework.org/api-guide/fields/#charfield

答案 5 :(得分:0)

根据link1link2,并且由于预期字段是null=True, blank=True(例如在我的示例中,email的{​​{1}}字段) :

django.contrib.auth.models.User