0

根据我对序列化程序如何工作的了解,我知道我们主要使用模型序列化程序,为此,我们将有一个模型来处理我们想要序列化的所有内容,但是我怎样才能将不同模型中的所有图像连接起来,然后对其进行序列化。

这些是我的模型

class Vendors(models.Model):
    title = models.CharField(max_length=50, blank=False)
    image = models.ImageField(upload_to='static/vendors', blank=True, null=True)

class Riders(models.Model):
    title = models.CharField(max_length=50, blank=False)
    image = models.ImageField(upload_to='static/riders', blank=True, null=True)

class VendorsRiders(models.Model):
    VendorImg = models.ForeignKey(Vendors, on_delete=models.CASCADE)
    RiderImg = models.ForeignKey(Riders, on_delete=models.CASCADE)

这是我的序列化器

Class VendorsRidersSerializers(models.Model):
    Class Meta:
           model = VendorsRiders
           fields = '__all__'

那么,如何将所有图像获取到我指定的端点?因为,我是 DRF 的初学者,我还需要关于最佳实践的建议和建议。谢谢

4

1 回答 1

0

通过在序列化程序中定义fields = '__all__',您只需访问模型的属性。序列化相关模型的图像字段的一种方法是定义SerializerMethodFieldLike:

Class VendorsRidersSerializers(models.Model):
    rider_image = serializers.SerializerMethodField()

    Class Meta:
           model = VendorsRiders
           fields = '__all__'

    def get_rider_image(self, obj):
        req = self.context['request']
        # build_absolute_uri will convert your related url to absolute url
        return req.build_absolute_uri(obj.VendorImg.image.url)

另请注意,您应该将视图中的请求传递给序列化程序的上下文以构建绝对 URL(例如:VendorsRidersSerializers(queryset, many=True, context={'request': self.request}) 或覆盖该get_serializer_class方法并通过对其上下文的请求),然后使用此序列化程序的数据。

于 2020-08-30T15:49:45.973 回答