簡體   English   中英

如何在 django 串行器中加入模型?

[英]How to join models in django serializers?

我正在嘗試加入兩個模型,但我得到了錯誤的結果。 怎么做才對?

我的模型:

class MoocherPage(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=False)
    name = models.CharField(max_length=48, unique=True, blank=False, null=False)
    bio = models.TextField(blank=False, null=False)


class MoocherResource(models.Model):
    url = models.URLField(blank=False, null=False)
    moocher = models.ForeignKey(MoocherPage, on_delete=models.CASCADE)

和序列化器:

class MoocherResourceSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        URL_FIELD_NAME = 'url'
        model = MoocherResource
        fields = ('url', )


class MoocherPageSerializer(serializers.ModelSerializer):
    resources = MoocherResourceSerializer(many=True, read_only=True)

    class Meta:
        model = MoocherPage
        fields = ('name', 'bio', 'resources')
        depth = 1

我期望

{
    "name": "KissofLove",
    "bio": "I'm the kiss of love and I collect money for all lovers of the world.",
    "resources": ["https://stackoverflow.com/users/KissofLove"]
}

但不包括resources


當我在嵌套序列化程序中將read_only=True更改為False時,會出現錯誤。 AttributeError: Original exception text was: 'MoocherPage' object has no attribute 'resources'.

你的模型

class MoocherPage(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=False)
    name = models.CharField(max_length=48, unique=True, blank=False, null=False)
    bio = models.TextField(blank=False, null=False)


class MoocherResource(models.Model):
    url = models.URLField(blank=False, null=False)
    moocher = models.ForeignKey(MoocherPage, on_delete=models.CASCADE)

和你的序列化器,

from rest_framework.serializers import *

class ResourceListingField(RelatedField):
    def to_representation(self, value):
        return value.url


class MoocherPageSerializer(ModelSerializer):
    resources = ResourceListingField(many=True, source='moocherresource_set', read_only=True)

    class Meta:
        model = MoocherPage
        fields = ['name', 'bio', 'resources']

這將返回所需的

{
"name": "KissOfLove",
"bio": "I'm the kiss of love and I collect money for all lovers of the world.",
"resources": ["https://stackoverflow.com/users/KissofLove"]
}

回復。

查看自定義關系字段

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM