Как установить вложенные сериализаторы без ошибок
Я новичок в DRF и последние недели пытаюсь создать вложенную структуру сериализатора. По существу, у меня есть модель User и модель Social Media, в которой User является внешним ключом:
models.py
class CustomUser(AbstractUser):
id = models.UUIDField(default = uuid.uuid4, editable = False, primary_key = True)
country = CountryField(blank_label='(select country)')
updated_at = models.DateTimeField(auto_now = True, editable = False, null = True)
gender = models.CharField(max_length=50, choices=Gender.choices, default = Gender.OTHERS)
avatar = models.ImageField(upload_to = "avatar_pics", default = "avatar_pics/default.jpg", null = True)
class UserSocialMediaAccounts(models.Model):
id = models.UUIDField(default = uuid.uuid4, editable = False, primary_key = True)
user = models.ForeignKey(CustomUser, on_delete = models.CASCADE)
social_media = models.CharField(max_length=50, choices=SocialAccounts.choices)
social_media_url = models.URLField(null = False)
На данный момент мои сериализаторы для отображения пользователя и связанных с ним аккаунтов социальных сетей следующие:
<class CustomUserSocialMediaSerializer(serializers.ModelSerializer):
class Meta:
model = UserSocialMediaAccounts
fields = ('user','social_media', 'social_media_url')
class CustomUserDetailSerializerSM(CountryFieldMixin,serializers.ModelSerializer):
social_media = CustomUserSocialMediaSerializer(many = True)
class Meta:
model = CustomUser
fields = ('email','first_name','last_name','country','gender','avatar','social_media')
serializers.py
Мое представление, которое я хочу использовать для отображения связанных аккаунтов социальных сетей запрашиваемого пользователя:
views.py
class CustomUserDetailSocialMediaView(generics.ListCreateAPIView):
serializer_class = CustomUserDetailSerializerSM
permission_classes = (IsAuthorOrReadOnly,)
def get_queryset(self):
username = self.kwargs['username']
return UserSocialMediaAccounts.objects.filter(user__username = username)
urls.py
urlpatterns = [ path('detail/<str:username>/socialaccounts/',CustomUserDetailSocialMediaView.as_view()),
]
Однако, если я попытаюсь перейти к /accounts/detail/testuser1/socialaccounts, то отобразится:
AttributeError at /accounts/detail/testuser1/socialaccounts/
Got AttributeError when attempting to get a value for field `country` on serializer `CustomUserDetailSerializerSM`.
The serializer field might be named incorrectly and not match any attribute or key on the `UserSocialMediaAccounts` instance.
Original exception text was: 'UserSocialMediaAccounts' object has no attribute 'country'.
Я не уверен, что делаю неправильно, так как мне кажется, что я настроил свои сериализаторы эквивалентно настройке в самом учебнике по DRF: https://www.django-rest-framework.org/api-guide/relations/#nested-relationships. Может быть, это проблема с представлением? Любая помощь будет очень признательна. Я бьюсь головой об это уже 2 недели.