我有这些模型:
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 文档,请参见更多信息: