Jessica
Jessica

Reputation: 265

foreign key relationship in Django REST FRAMEWORK

I would like to create an employee object whose attributes include pre-existing foreign key (Department).when i see employee api.. i am getting department id instead of department name..enter image description here.. please help

models.py

class Department(models.Model):
name = models.CharField(max_length= 20)
def __str__(self):
    return self.name

class Employee(models.Model):
employee_name = models.CharField(max_length= 20)
surname = models.CharField(max_length= 20)
address = models.CharField(max_length  = 50)
qualification = models.CharField(max_length = 30)
contact_num = PhoneNumberField()
department = models.ForeignKey(Department, on_delete=models.PROTECT)
def __str__(self):
    return self.employee_name

serialize.py

class DepartmentSerializer(serializers.ModelSerializer):
""" Serializer to represent the Chain model """
    class Meta:
        model = Department
        fields = '__all__'


class EmployeeSerializer(serializers.ModelSerializer):
    """ Serializer to represent the Chain model """
    class Meta:
        model = Employee
        fields = '__all__'

Upvotes: 2

Views: 1021

Answers (1)

JPG
JPG

Reputation: 88459

You could use StringRelatedField() for the same.

class EmployeeSerializer(serializers.ModelSerializer):
    """ Serializer to represent the Chain model """
    department = serializers.StringRelatedField()
    class Meta:
        model = Employee
        fields = '__all__'

StringRelatedField may be used to represent the target of the relationship using its __unicode__ or __str__ method.



If you wish to see all details related to that FK, use depth as below

class EmployeeSerializer(serializers.ModelSerializer):
    """ Serializer to represent the Chain model """

    class Meta:
        model = Employee
        fields = '__all__'
        depth = 1

Upvotes: 2

Related Questions