【问题标题】:How to show a related_name field from Django models connected through a ManyToMany relationship?如何显示通过多对多关系连接的 Django 模型中的 related_name 字段?
【发布时间】:2020-09-21 14:35:02
【问题描述】:

Django 和关系数据库的新手。我正在构建经典的医生预约应用程序,并且已经到了不知道该怎么做的地步。我创建了指向诊所的医生模型,但在我的 API 中,诊所模型不会显示所有医生的列表。我怎样才能做到这一点?

class Clinic(models.Model):
    name = models.CharField(max_length=200)

class Doctor(models.Model):
    clinic = models.ManyToManyField(Clinic, related_name="doctors")
class ClinicSerializer(serializers.ModelSerializer):
    class Meta:
        model = Clinic
        fields = '__all__'

class DoctorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Doctor
        fields = '__all__'
class ClinicViewset(viewsets.ModelViewSet):
    queryset = Clinic.objects.all()
    serializer_class = ClinicSerializer

class DoctorViewset(viewsets.ModelViewSet):
    queryset = Doctor.objects.all()
    serializer_class = DoctorSerializer

【问题讨论】:

标签: django django-models django-rest-framework


【解决方案1】:

Django 会自动创建从ClinicDoctor 的链接。你不需要(不应该)定义它。来自docs

Django 还为关系的“另一端”创建 API 访问器——从相关模型到定义关系的模型的链接。例如,Blog 对象b 可以通过entry_set 属性访问所有相关Entry 对象的列表:b.entry_set.all()

创建clinic 字段时传递给ManyToManyFieldrelated_name 参数是从ClinicDoctor 的关系名称。它是可选的,如果你没有通过它,它将是模型的小写名称 + _set - doctor_set 在你的情况下。

ManyToManyField 的情况下,您通常会将其设置为复数形式。在您的情况下:doctors

因为您目前有related_name="doctor",您可以通过clinic.doctor.all()检索诊所的医生。

【讨论】:

  • 谢谢!我想我有正确的关系。我正在使用 Django Rest Framework 从模型中获取数据,但医生列表不会显示。我将编辑我的问题以反映这一点。
  • 我已经接受了正确的答案,因为我意识到编辑后的问题与原始问题有太大的不同。我会发布一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 2013-07-04
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
相关资源
最近更新 更多