I
I
Ivan2015-08-04 12:06:09
Django Rest Framework
Ivan, 2015-08-04 12:06:09

Django rest framework. How to select returned related fields?

Good day. There is a model

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='Текст отзыва')

I have a serialization class
class ReviewsSerializer(serializers.ModelSerializer):

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

With a post request, everything is ok. But how to make a GET request return not only the user ID, but also his username?
I tried to add depth=1 to the Meta class, but then absolutely all fields of the User model are returned, up to the hashed password.
Also tried to do:
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',)

But then, when creating an object (POST request), I need not only the user ID, but also its username.
Thanks for the help.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Alexander Pinkevich, 2015-08-04
@ATNC

here it should work

class ReviewsSerializer(serializers.ModelSerializer):
    reviews_from = serializers.ReadOnlyField(source='reviews_from.username', read_only=True)

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

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question