Skip to content

Commit c1ccc37

Browse files
committed
Add a real world example
1 parent 705e277 commit c1ccc37

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

tests/test_model_serializer.py

+27-11
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import django
1515
import pytest
16+
from django.contrib.auth.models import User
1617
from django.core.exceptions import ImproperlyConfigured
1718
from django.core.serializers.json import DjangoJSONEncoder
1819
from django.core.validators import (
@@ -736,25 +737,40 @@ class Meta:
736737
self.assertEqual(repr(TestSerializer()), expected)
737738

738739
def test_source_with_attributes(self):
739-
class TestSerializer(serializers.ModelSerializer):
740+
class UserProfile(models.Model):
741+
age = models.IntegerField()
742+
birthdate = models.DateField()
743+
user = models.ForeignKey(User, on_delete=models.CASCADE)
744+
745+
class UserProfileSerializer(serializers.ModelSerializer):
740746
class Meta:
741-
model = RelationalModel
742-
fields = ('foreign_key_name', 'one_to_one_name')
747+
model = UserProfile
748+
fields = ('username', 'email', 'first_name', 'last_name', 'age', 'birthdate')
743749
extra_kwargs = {
744-
'foreign_key_name': {
745-
'source': 'foreign_key.name',
750+
'username': {
751+
'source': 'user.username',
752+
},
753+
'email': {
754+
'source': 'user.email',
746755
},
747-
'one_to_one_name': {
748-
'source': 'one_to_one.name',
756+
'first_name': {
757+
'source': 'user.first_name',
758+
},
759+
'last_name': {
760+
'source': 'user.last_name',
749761
}
750762
}
751763

752764
expected = dedent("""
753-
TestSerializer():
754-
foreign_key_name = CharField(max_length=100, source='foreign_key.name')
755-
one_to_one_name = CharField(max_length=100, source='one_to_one.name')
765+
UserProfileSerializer():
766+
username = CharField(help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, source='user.username', validators=[<django.contrib.auth.validators.UnicodeUsernameValidator object>, <UniqueValidator(queryset=User.objects.all())>])
767+
email = EmailField(allow_blank=True, label='Email address', max_length=254, required=False, source='user.email')
768+
first_name = CharField(allow_blank=True, max_length=150, required=False, source='user.first_name')
769+
last_name = CharField(allow_blank=True, max_length=150, required=False, source='user.last_name')
770+
age = IntegerField()
771+
birthdate = DateField()
756772
""")
757-
self.assertEqual(repr(TestSerializer()), expected)
773+
self.assertEqual(repr(UserProfileSerializer()), expected)
758774

759775

760776
class DisplayValueTargetModel(models.Model):

0 commit comments

Comments
 (0)