user9840214
user9840214

Reputation:

Django Rest Framework related fields

I'm new to Django I want to get profile image from another model topic

models.py

class UserProfile(models.Model):
    user  = models.OneToOneField(User)
    file  = models.ImageField(upload_to='profile_image', blank=True)
    def __unicode__(self):
        return u'%s' % self.user

class Topics(models.Model):
    user  = models.ForeignKey(User)
    title = models.charField(max_length = 55)

serializers.py

User = get_user_model()

class pic(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ['file']

class UserInfo(serializers.ModelSerializer):
    username = pic(read_only=True)
    class Meta:
        model = User
        fields = ['username','first_name',]

class TopicSerializer(serializers.ModelSerializer):
    user= UserInfo(read_only=True)
    class Meta:
        model=Topics
        fields = ('user','title',)

I'm getting like this:

"user": {
    "username": {},
    "first_name": ""
},
"title": "Django the title",

Now I need every file field related to Topics field with the first name and email of the user.

I want to like this:

"user": {
    "username": "akash",
    "first_name": "Akash DK"
    "file":"static/imag.png"
},
"title": "Django the title",

Thanks in advance

Upvotes: 0

Views: 94

Answers (1)

Will Keeling
Will Keeling

Reputation: 23004

You could use a SerializerMethodField in your UserInfo serializer to lookup the profile image and add it to the output data.

class UserInfo(serializers.ModelSerializer):
    file = serializers.SerializerMethodField()

    def get_file(self, user):
        return UserProfile.objects.get(user=user).file.url

    class Meta:
        model = User
        fields = ['username','first_name', 'file']

Upvotes: 1

Related Questions