反向关系序列化DRF中访问@属性方法
Access @property method in reverse relation serialization DRF
我有这些型号:
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
模型可以有多个照片对象(应该是 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')
可以在 reverse relations:
的 DRF 文档中找到更多信息
我有这些型号:
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
模型可以有多个照片对象(应该是 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')
可以在 reverse relations:
的 DRF 文档中找到更多信息