Django 序列化模型DRF中相关模型的字段

Django 序列化模型DRF中相关模型的字段,django,django-rest-framework,Django,Django Rest Framework,我有一个序列化程序,如下所示: class ImageSerializer(serializers.HyperlinkedModelSerializer): prop_post = serializers.SlugRelatedField(queryset=PropertyPost.objects.all(), slug_field='pk') class Meta: mo

我有一个序列化程序,如下所示:

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)

使用将完成任务的
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

更易于使用“源”,并且可以使用用户序列化程序填充所有者字段

例如:

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',
        )

将您的模型添加到问题部分如果工作正常,则会添加整个所有者模型,这是一种仅显示所有者的一个字段(如
owner.email
)的方法吗?您可以使用特殊的用户序列化器仅序列化电子邮件字段。或者您可以尝试使用CharField并将source设置为仅电子邮件字段。