如何在Django Rest API中序列化相关模型?(How to serialize related models in Django Rest API?)

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

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

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

I have tried all the solutions. Still cannot resolve it. Here are the codes.

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

I can't get to view all the 'Owner' objects related to a certain object of the 'Car' class.

最满意答案

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

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

You need to define a related name on the ForeignKey to create the reverse reference.

class Owners(models.Model): car = models.ForeignKey(Car, on_delete=models.CASCADE, default=0, related_name='owners')如何在Django Rest API中序列化相关模型?(How to serialize related models in Django Rest API?)

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

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

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

I have tried all the solutions. Still cannot resolve it. Here are the codes.

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

I can't get to view all the 'Owner' objects related to a certain object of the 'Car' class.

最满意答案

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

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

You need to define a related name on the ForeignKey to create the reverse reference.

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