【问题标题】:Creating List APi for two models having many to one relationship为具有多对一关系的两个模型创建 List APi
【发布时间】:2021-01-18 01:11:35
【问题描述】:

这里我有两个模型 Ailines 和 Flight Details。第二种模型是与航空公司模型的多对一关系。当我为航班详细信息创建 ListAPi 视图时,航空公司名称不会出现在 api 上,而是只出现 id(pk)。看下图,航空公司只有编号没有航空公司名称。

class Airlines(models.Model):
        Airline_Name = models.CharField(max_length=200, unique= True)
        Email = models.EmailField(max_length=200, unique= True, help_text='example@gmail.com')
    
        Address = models.CharField(max_length=200)
        Phone_Number = PhoneField(help_text='Contact phone number')
    
    
        def __str__(self):
            return self.Airline_Name


class FlightDetails(models.Model):
    Flight_Name = models.CharField(max_length=200)
    Aircraft_name = models.CharField(max_length=200)
    airlines = models.ForeignKey(Airlines, null=True, on_delete=models.CASCADE)

    Destination = models.CharField(max_length=200, verbose_name = "To")
    Destination_Code = models.CharField(max_length=200)
    Destination_Airport_name = models.CharField(max_length=200)

在这里我们可以看到在航空公司中显示的是 1,而不是航空公司名称。我们该如何解决??

【问题讨论】:

  • 能否为您的视图和序列化程序添加代码?

标签: python django api object model


【解决方案1】:

在您的序列化程序中添加 depth = 2 你应该对 Airlines(serializers.ModelSerializer) 进行分类:

class Airlines(serializers.ModelSerializer):

    class Meta:
        model = Airlines
        fields = ['Airline_Name']

class FlightDetails(serializers.ModelSerializer):
    airline = Airlines()

    class Meta:
        model = Loan
        fields = '__all__'
        depth = 2

要获得唯一的 airline_name,您必须在航空公司序列化程序中定义它。我更新了代码块。 depth 选项应设置为整数值,指示在恢复为平面表示之前应遍历的关系深度。

源代码:https://www.django-rest-framework.org/api-guide/serializers/

【讨论】:

  • 如果我添加depth =2,api会显示航空公司模型的所有数据。我们可以只获取航空公司名称而不是显示ID吗? ...你能解释一下这个深度实际上是什么意思吗?
  • class Airlines(serializers.ModelSerializer): class Meta: model = Airlines fields = ['Airline_Name'] depth = 2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
相关资源
最近更新 更多