反向关系序列化 DRF 中的访问@property方法



我有这些模型:

class Datas(BaseModel):
path = models.CharField()
folder = models.ForeignKey(folder, on_delete=models.CASCADE)

class Photos(BaseModel):
data = models.ForeignKey('Datas', on_delete=models.CASCADE)
name = models.CharField()
@property
def file_path(self):
return urljoin(self.data.folder.url, quote(self.full_path))

这些用于数据模型的序列化程序:

class DatasSerializer(serializers.ModelSerializer):
path = serializers.CharField()
file_url = serializers.SerializerMethodField()
class Meta:
model = Datas
fields = (
'id',
'path',
'folder',
'file_url'
)
def get_file_url(self, obj):
return Photos.file_path

我想要的是从照片模型中检索file_path。 是否可以以反向关系的方式访问属性方法?

由于外键关系,一个Datas模型可以有多个 Photos 对象(它应该是Data,因为它已经是一个复数词(。如果您想要最新的Photo请尝试:

class DatasSerializer(serializers.ModelSerializer):
path = serializers.CharField()
file_url = serializers.SerializerMethodField()
class Meta:
model = Datas
fields = (
'id',
'path',
'folder',
'file_url'
)
def get_file_url(self, obj):
return obj.photos_set.last().file_path  # or `first()` to get the first object

如果你想要所有这些,那么你可以这样尝试:

class PhotoSerializer(serializers.ModelSerializer):
file_url = serializers.Field()
class Meta:
model = Photos
fields = ['file_url']
class DatasSerializer(serializers.ModelSerializer):
path = serializers.CharField()
photos = PhotoSerializer(read_only=True, many=True, source='photos_set')
class Meta:
model = Datas
fields = ('id', 'path', 'folder', 'photos')

有关反向关系的 DRF 文档,请参见更多信息:

相关内容

最新更新