|
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