Django
Django

Reputation: 67

concatenate two fields after "ReadOnlyField(source= " in Django rest framework

I have a Django app using Django rest framework as restful api.

I want to concatenate two fields after "ReadOnlyField(source= " in Serializer.py

Serializer.py:

class MaterialSerializer(serializers.ModelSerializer):
    book = BookSerializer(many=False)
    course = CourseSerializer(many=False)
      school = serializers.ReadOnlyField(source='course.courseInfo.school.code', allow_null=True)
    courseCode = serializers.ReadOnlyField(source='course.courseInfo.discipline_code'+'course.courseInfo.code') #I want to concatenate discipline_code and code, but seems like using "+" could not work
       class Meta:
        model = Material
        fields = ['id', 'book', 'course', 'school', 'courseCode']

How could I concatenate discipline_code and code after "ReadOnlyField(source= "?

Upvotes: 1

Views: 1089

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476813

You can work with a SerializerMethodField [drf-doc] to provide the outcome of a method call:

class MaterialSerializer(serializers.ModelSerializer):
    book = BookSerializer(many=False)
    course = CourseSerializer(many=False)
      school = serializers.ReadOnlyField(source='course.courseInfo.school.code', allow_null=True)
    courseCode = serializers.SerializerMethodField()
    
    def get_courseCode(self, obj):
        return f'{obj.course.courseInfo.discipline_code} {obj.course.courseInfo.code}'
    
    class Meta:
        model = Material
        fields = ['id', 'book', 'course', 'school', 'courseCode']

Here it thus will determine the courseCode by calling the get_courseCode and using the outcome of that call for the courseCode item.

Upvotes: 1

Related Questions