|
13 | 13 |
|
14 | 14 | import django |
15 | 15 | import pytest |
| 16 | +from django.contrib.auth.models import User |
16 | 17 | from django.core.exceptions import ImproperlyConfigured |
17 | 18 | from django.core.serializers.json import DjangoJSONEncoder |
18 | 19 | from django.core.validators import ( |
@@ -736,25 +737,40 @@ class Meta: |
736 | 737 | self.assertEqual(repr(TestSerializer()), expected) |
737 | 738 |
|
738 | 739 | 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): |
740 | 746 | 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') |
743 | 749 | extra_kwargs = { |
744 | | - 'foreign_key_name': { |
745 | | - 'source': 'foreign_key.name', |
| 750 | + 'username': { |
| 751 | + 'source': 'user.username', |
| 752 | + }, |
| 753 | + 'email': { |
| 754 | + 'source': 'user.email', |
746 | 755 | }, |
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', |
749 | 761 | } |
750 | 762 | } |
751 | 763 |
|
752 | 764 | 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() |
756 | 772 | """) |
757 | | - self.assertEqual(repr(TestSerializer()), expected) |
| 773 | + self.assertEqual(repr(UserProfileSerializer()), expected) |
758 | 774 |
|
759 | 775 |
|
760 | 776 | class DisplayValueTargetModel(models.Model): |
|
0 commit comments