我有一个模型,我正在逐步填写,这意味着我正在制作一个表单向导。
因为这个模型中的大多数字段都是必需的,但是null=True, blank=True
可以避免在提交部分数据时引发非空错误。
我正在使用Angular.js和django-rest-framework,我需要告诉api x和y字段应该是必需的,如果它们是空的,它需要返回验证错误。
答案 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,则另一种选择是使用required
和trim_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)