Хотите получить значение внешнего ключа вместо целого объекта с помощью сериализаторов django-rest-framework
Я использую фреймворк Django rest для создания API. У меня есть следующие модели: 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
Для создания сериализатора 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')
Чтобы создать службы отдыха, используйте следующие представления:
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)
Получение объекта Faculty при обращении к конечной точке /course/, как показано на изображении. хотите получить имя факультета вместо объекта Faculty в полях формы метода post (выпадающий список)
Я попробовал следующие коды:
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
Я изменил код файла serializers.py следующим образом
class CourseSerializer(serializers.ModelSerializer):
# print(Faculty.objects.all().values('name'))
faculty = serializers.SlugRelatedField(slug_field='name',queryset=Faculty.objects.all())
class Meta:
model = Course
fields = ('name', 'faculty', 'end_date')