我正在使用 Django Rest 框架来创建 API。我有以下型号: 模型.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
创建序列化器 序列化器.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)
如镜像所显示,在访问/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
对
__str__
实现Faculty
方法:
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)
def __str__(self):
return self.name
注意:A
not 存储字符串表示形式(或名称) 列中引用的对象,它存储它的记录的主键 列中带有ForeignKey
后缀的引用指向_id
字段。所以ForeignKey
通常不 以ForeignKey
后缀结尾。你可能想要 考虑将_name
字段重命名为faculty_name
。faculty
[Django-doc] 不是必需的:字段默认情况下不可为 NULL。null=False