gpt4 book ai didi

python - django 多对多通过

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:26 25 4
gpt4 key购买 nike

我正在尝试实现一个教练系统,但我对 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')

关于python - django 多对多通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42533256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com