0
0
Djangoframework~20 mins

Serializer validation in Django - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Serializer Validation Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this serializer validation code?

Consider this Django REST Framework serializer:

from rest_framework import serializers

class ProductSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=100)
    price = serializers.DecimalField(max_digits=5, decimal_places=2)

serializer = ProductSerializer(data={'name': 'Pen', 'price': '12.345'})
valid = serializer.is_valid()
errors = serializer.errors

What will be the value of valid and errors after running this code?

Django
from rest_framework import serializers

class ProductSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=100)
    price = serializers.DecimalField(max_digits=5, decimal_places=2)

serializer = ProductSerializer(data={'name': 'Pen', 'price': '12.345'})
valid = serializer.is_valid()
errors = serializer.errors
Avalid is False; errors contain {'price': ['Ensure that there are no more than 2 decimal places.']}
Bvalid is True; errors is an empty dict {}
Cvalid is False; errors contain {'name': ['This field is required.']}
Dvalid is True; errors contain {'price': ['Invalid decimal value.']}
Attempts:
2 left
💡 Hint

Check how DecimalField validates decimal places.

state_output
intermediate
2:00remaining
What is the value of validated_data after calling is_valid()?

Given this serializer and data:

from rest_framework import serializers

class UserSerializer(serializers.Serializer):
    username = serializers.CharField()
    age = serializers.IntegerField(min_value=18)

serializer = UserSerializer(data={'username': 'alice', 'age': 17})
serializer.is_valid()
validated = serializer.validated_data

What will be the value of validated?

Django
from rest_framework import serializers

class UserSerializer(serializers.Serializer):
    username = serializers.CharField()
    age = serializers.IntegerField(min_value=18)

serializer = UserSerializer(data={'username': 'alice', 'age': 17})
serializer.is_valid()
validated = serializer.validated_data
ARaises a ValidationError because validated_data is not set when validation fails
B{'username': 'alice', 'age': 17}
C{} (empty dict)
DNone
Attempts:
2 left
💡 Hint

Think about what happens when is_valid() returns False.

📝 Syntax
advanced
2:00remaining
Which option correctly implements a custom field-level validation method?

In Django REST Framework serializers, how do you correctly write a custom validation method for the field email?

Django
from rest_framework import serializers

class ContactSerializer(serializers.Serializer):
    email = serializers.EmailField()

    # Custom validation method here
A
def validate_email(self):
    if not self.email.endswith('@example.com'):
        raise serializers.ValidationError('Email must be from example.com')
    return self.email
B
def validate(self, data):
    if not data['email'].endswith('@example.com'):
        raise serializers.ValidationError('Email must be from example.com')
    return data
C
def validate_email(self, value):
    if not value.endswith('@example.com'):
        raise serializers.ValidationError('Email must be from example.com')
    return value
D
def validate_email(value):
    if not value.endswith('@example.com'):
        raise serializers.ValidationError('Email must be from example.com')
    return value
Attempts:
2 left
💡 Hint

Field-level validation methods must be named validate_ and accept self and value.

🔧 Debug
advanced
2:00remaining
Why does this serializer raise a KeyError during validation?

Look at this serializer code:

from rest_framework import serializers

class OrderSerializer(serializers.Serializer):
    product_id = serializers.IntegerField(read_only=True)
    quantity = serializers.IntegerField()

    def validate(self, data):
        if data['quantity'] > 10 and data['product_id'] == 0:
            raise serializers.ValidationError('Invalid order')
        return data

serializer = OrderSerializer(data={'quantity': 15})
serializer.is_valid()

Why does calling is_valid() raise a KeyError?

Django
from rest_framework import serializers

class OrderSerializer(serializers.Serializer):
    product_id = serializers.IntegerField(read_only=True)
    quantity = serializers.IntegerField()

    def validate(self, data):
        if data['quantity'] > 10 and data['product_id'] == 0:
            raise serializers.ValidationError('Invalid order')
        return data

serializer = OrderSerializer(data={'quantity': 15})
serializer.is_valid()
ABecause 'quantity' is missing in input data, causing KeyError
BBecause 'product_id' is missing in input data, accessing data['product_id'] causes KeyError
CBecause validate method must return None, not data
DBecause serializers.IntegerField() does not accept missing fields
Attempts:
2 left
💡 Hint

Check which fields are required and what keys exist in data inside validate().

🧠 Conceptual
expert
2:00remaining
Which option best describes the order of validation methods called in a serializer?

In Django REST Framework, when you call serializer.is_valid(), in what order are the following validation methods called?

  • Field-level validation methods (e.g., validate_)
  • Object-level validation method (validate(self, data))
  • Built-in field validators
A1, 3, 2
B2, 1, 3
C3, 1, 2
D1, 2, 3
Attempts:
2 left
💡 Hint

Think about how DRF validates each field before running custom validations.