我正在尝试实现一个教练系统,但我对 django 中的序列化有点迷茫。我有一个多对多的直通模型来控制约会,我想获得有关参与的教练/教练的所有数据关系。
class Appointment(models.Model):
"""docstring for Appointment"""
coach = models.ForeignKey(User, related_name='coaches', on_delete=models.CASCADE)
coachee = models.ForeignKey(User, related_name='coachees', on_delete=models.CASCADE)
schedule_date = models.DateField(auto_now=False, auto_now_add=True, blank=True)
due_date = models.DateField()
summary = models.TextField(max_length=200)
使用以下序列化器我可以获得涉及的主键,但我真的很想在一个请求中获得教练和教练的详细信息。
#return appointment data
class AppointmentSerializer(serializers.HyperlinkedModelSerializer):
"""docstring for AppointmentSerializer"""
class Meta:
model = Appointment
fields = ('id', 'schedule_date', 'due_date', 'coach', 'coachee', 'summary', 'condition')
请您参考如下方法:
尝试在 Meta 类上设置 depth 选项。
class AppointmentSerializer(serializers.HyperlinkedModelSerializer):
"""docstring for AppointmentSerializer"""
class Meta:
model = Appointment
fields = ('id', 'schedule_date', 'due_date', 'coach', 'coachee', 'summary', 'condition')
depth = 1
这将生成嵌套表示。
或者,如果您需要更多控制,您可以显式指定序列化器。
class AppointmentSerializer(serializers.HyperlinkedModelSerializer):
coach = CoachSerializer()
coachee = CoacheeSerializer()
class Meta:
model = Appointment
fields = ('id', 'schedule_date', 'due_date', 'coach', 'coachee', 'summary', 'condition')
您还可以从相关模型中添加单个字段:
class AppointmentSerializer(serializers.HyperlinkedModelSerializer):
"""docstring for AppointmentSerializer"""
coach_name = serializers.CharField(source='coach.name')
class Meta:
model = Appointment
fields = ('id', 'schedule_date', 'due_date', 'coach', 'coachee', 'summary', 'condition')
