@ATNC
Full-stack web\python developer

Django rest framework. Как выбрать возвращаемые связанные поля?

Доброго времени суток. Есть модель
from django.contrib.auth.models import User
class Reviews(models.Model):
    reviews_from = models.ForeignKey(User, related_name='reviews_user',
                                        verbose_name='Отзыв написал')    
    reviews_text = models.TextField(verbose_name='Текст отзыва')

Есть класс сериализации
class ReviewsSerializer(serializers.ModelSerializer):

    class Meta:
        model = Reviews
        fields = ('reviews_from','reviews_text',)


При post запросе все ок. Но как сделать чтобы при GET запросе возвращался не только ID пользователя, но и его username?
Пробовал добавлять depth=1 в класс Мета, но тогда возвращаются абсолютно все поля модели Юзер, вплоть до хешированого пароля.
Также пытался сделать:
class UserSerializer(serializers.ModelSerializer):

     class Meta:
         model = User
         fields = ('id', 'username')

class ReviewsSerializer(serializers.ModelSerializer):
    reviews_from = UserSerializer()
    class Meta:
        model = Reviews
        fields = ('reviews_from','reviews_text',)

Но тогда при создании объекта (POST запросе) у меня требует не только ID пользователя, но еще и его username.
Спасибо за помощь.
  • Вопрос задан
  • 882 просмотра
Решения вопроса 1
pinkevich
@pinkevich
Developer
вот, должно работать
class ReviewsSerializer(serializers.ModelSerializer):
    reviews_from = serializers.ReadOnlyField(source='reviews_from.username', read_only=True)

    class Meta:
        model = Reviews
        fields = ('reviews_from', 'reviews_text')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы