3

現在、DRF に基づいて API を作成しています。次のようなモデルがあります。

class Task(models.Model):
    name = models.CharField(max_length = 255)
    completed = models.BooleanField(default = False)
    description = models.TextField()
    text = models.TextField(blank = False, default = "this is my text" )

    def __unicode__(self):
        return self.name

このモデルに対応するシリアライザーは次のとおりです。

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        fields = ('name','description','completed','text')

私の質問は、データを取得しながらモデルの「名前」フィールドを検証したいということです。たとえば、Django フォームに似た Python コードを使用して、ユーザーの姓または名のチェックを終了することができます。

def clean_name(self):
    name = form.cleaned_data.get('name')
    first,second = name.split(' ')
    if second is None:
        raise forms.ValidationError("Please enter full name")

Serializers.serializer クラスで「validate_(fieldname)」と呼ばれるものを知っています。しかし、これを代わりに Serializers.ModelSerializer で使用したい (Django のカスタム フォーム検証と同様)。

4

1 に答える 1

10

この検証を実行するメソッドをシリアライザーに追加validate_name()できます。検証された値を返すか、ValidationError.

ユーザーが氏名を入力したかどうかを確認するにstr.split()は、文字列内のすべての単語を返す which を使用します。いいえ。文字列内の単語数が 1 以下の場合、a を発生させValidationErrorます。それ以外の場合は、 を返しますvalue

class TaskSerializer(serializers.ModelSerializer):

    def validate_name(self, value):
        """
        Check that value is a valid name.
        """
        if not len(value.split()) > 1: # check name has more than 1 word
            raise serializers.ValidationError("Please enter full name") # raise ValidationError
        return value
于 2015-11-16T17:23:37.463 に答える