I'm using the Django rest framework to create an API. I have the following models:
models.py
class Faculty(models.Model):
name = models.CharField(max_length=25, unique=False, null=False, blank=False)
email = models.EmailField(max_length=25, unique=True, null=False, blank=False)
class Course(models.Model):
name = models.CharField(max_length=25, unique=True, null=False, blank=False)
faculty_name = models.ForeignKey(Faculty, on_delete=models.CASCADE, related_name='faculty_name')
end_date = models.DateField()
def __str__(self):
return self.faculty_name
# @property
# def faculty_name(self):
# return self.faculty.name
To create a serializer serializers.py
class FacultySerializer(serializers.ModelSerializer):
class Meta:
model = Faculty
fields = '__all__'
class CourseSerializer(serializers.ModelSerializer):
# faculty_name = serializers.SlugRelatedField(slug_field='name', read_only=True)
# faculty_name = serializers.ReadOnlyField(source='faculty.name')
print(Faculty.objects.all().values('name'))
class Meta:
model = Course
fields = ('name', 'faculty_name', 'end_date')
To create rest services using the following views:
views.py
class Course(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
serializer_class = CourseSerializer
queryset = Course.objects.all()
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
class Faculty(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
serializer_class = FacultySerializer
queryset = Faculty.objects.all()
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
Getting the Faculty object while accessing the /course/ endpoint as shown in the image. want to get the faculty name instead of the Faculty object in the post method's form fields(dropdown)
I have tried the below codes:
1)faculty_name = FacultySerializer() --> not providing the faculty list
2)faculty_name = serializers.ReadOnlyField(source='faculty.name') --> hiding the faculty name
3)faculty_name = serializers.SlugRelatedField(slug_field='name', read_only=True) --> providing only name in response
I changed the serializers.py file's code like below
and got the required outcome as mentioned.