【问题标题】:How to serialize related models in Django Rest API?如何在 Django Rest API 中序列化相关模型?
【发布时间】:2017-01-20 08:32:52
【问题描述】:

我已经尝试了所有解决方案。仍然无法解决。这是代码。

models.py

class Car(models.Model):
    car_name = models.CharField(max_length=250)
    car_description = models.CharField(max_length=250)


    def __str__(self):
        return self.car_name + ' - ' + str(self.pk)

class Owners(models.Model):
    car = models.ForeignKey(Car, on_delete=models.CASCADE, default=0)
    owner_name = models.CharField(max_length=250)
    owner_desc = models.CharField(max_length=250)

    def get_absolute_url(self):
        return reverse('appname:index')

    def __str__(self):
        return self.owner_name + ' - ' +    self.owner_desc

serializers.py

class OwnersSerializer(serializers.ModelSerializer):  
    class Meta:
        model = Owners
        fields = '__all__'


class CarSerializer(serializers.ModelSerializer):  

    owners = OwnersSerializer(many=True, read_only=True)
    class Meta:
        model = Car
        fields = '__all__'

views.py

class CarList(APIView):

    def get(self, request):
        cars = Car.objects.all()
        serializer = CarSerializer(cars, many=True)
        return Response(serializer.data)

    def post(self):
        pass    

我无法查看与“汽车”类的某个对象相关的所有“所有者”对象。

【问题讨论】:

  • 输出的序列化数据是什么样的?你希望它看起来像什么?
  • 你也没有得到描述字段。您是否尝试过明确设置 fields 值以包含所有字段,而不是仅使用 __all__
  • 糟糕,我得到了描述数据。已编辑。 [ { "car_name": "ada", "car_description": "adad" }, { "car_name": "sdada", "car_description": "fafa" } ]

标签: python django python-2.7 rest django-rest-framework


【解决方案1】:

您需要在 ForeignKey 上定义一个相关名称来创建反向引用。

class Owners(models.Model):

    car = models.ForeignKey(Car, on_delete=models.CASCADE, default=0, related_name='owners')

【讨论】:

    猜你喜欢
    • 2014-02-15
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2014-06-24
    • 2017-02-13
    • 1970-01-01
    相关资源
    最近更新 更多