在模型DRF中序列化相关模型的字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在模型DRF中序列化相关模型的字段相关的知识,希望对你有一定的参考价值。
我有一个序列化器如下:
class ImageSerializer(serializers.HyperlinkedModelSerializer):
prop_post = serializers.SlugRelatedField(queryset=PropertyPost.objects.all(),
slug_field='pk')
class Meta:
model = Image
fields = (
'url',
'photo',
'prop_post',
)
这很好用。现在,我的PropertyPost有一个“所有者”字段,我需要将其包含在我的ImageSerializer中。我想知道我怎么能这样做。我在想它可能就像
fields = (
'url',
'photo',
'prop_post',
'prop_post__owner'
)
但它不起作用。任何帮助表示赞赏。这是我的模特:
class PropertyPost(models.Model):
owner = models.ForeignKey(
get_user_model(),
related_name='posts4thisowner',
on_delete=models.CASCADE)
class CustomUser(AbstractUser):
pass
class Image(models.Model):
prop_post = models.ForeignKey(
PropertyPost,
related_name='images4thisproperty',
on_delete=models.CASCADE)
photo = models.ImageField(upload_to=upload_update_image, null=True, blank=True)
答案
更容易使用“来源”,您可以使用用户序列化程序填充所有者字段。
例:
class ImageSerializer(serializers.HyperlinkedModelSerializer):
prop_post = serializers.SlugRelatedField(queryset=PropertyPost.objects.all(),
slug_field='pk')
owner = UserSerializer(source="prop_post.owner")
class Meta:
model = Image
fields = (
'url',
'photo',
'prop_post',
'owner',
)
另一答案
使用SerializerMethodField()
来完成任务。由于您尚未发布模型及其相关信息。我告诉你如何实现这个目标。如果你也可以添加模型会更好。我将能够相应地更新答案。
from rest_framework.serializers import SerializerMethodField
class ImageSerializer(serializers.HyperlinkedModelSerializer):
prop_post = serializers.SlugRelatedField(queryset=PropertyPost.objects.all(),
slug_field='pk')
prop_post_title = SerializerMethodField()
class Meta:
model = Image
fields = [
'url',
'photo',
'prop_post',
'prop_post_title',
]
def get_prop_post_title(self, obj):
try:
return obj.prop_post.title
except:
return None
以上是关于在模型DRF中序列化相关模型的字段的主要内容,如果未能解决你的问题,请参考以下文章