我有一个序列化器,如下所示:
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)
答案 0 :(得分:0)
使用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
答案 1 :(得分:0)
更易于使用“源代码”,您可以使用用户序列化程序填充所有者字段。
示例:
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',
)