簡體   English   中英

如何將OneToOneField序列化為Django-Rest-Framework中的列表?

[英]How can I serialize the OneToOneField to be list in Django-Rest-Framework?

如何序列化要列出的OneToOneField?

我有兩個模型:

class SwitchesPort(models.Model):
    """
    SwitchesPort
    """
    name = models.CharField(max_length=32)
    profile = models.CharField(max_length=256)

class Server(models.Model):
    ...
    switchesport = models.OneToOneField(to=SwitchesPort, related_name="server", on_delete=models.DO_NOTHING, null=True)  

您會看到,它們是OneToOne關系。

在SwitchesPortSerializer中,我只能將physical_server設置為many=False

class SwitchesPortSerializer(ModelSerializer):
    """
    SwitchesPort
    """
    server = ServerSerializer(many=False, read_only=True)
    class Meta:
       ...

如果我設置為True,則將報告錯誤,因為它們是一對一的關系。 結果將是這樣的:

[
    {
        "name": "switches_port01",
        "profile":"",
        "server": {
            "name": "server01",
            ...
        }
    },
    ...
]

但是,我想將physical_server作為JSON列表而不是JSON對象獲取,如何在Django-Rest-Framework中做到這一點?

我的需求數據是這樣的:

[
    {
        "name": "switches_port01",
        "profile":"",
        "server": [
            {
            "name": "server01",
            ...
            }
        ]
    },
    ...
]

盡管關系是一對一的,但我仍然想要獲取列表,而不是對象。
可行嗎?

您可以從序列化程序類重寫to_representation方法

class SwitchesPortSerializer(ModelSerializer):
    """
    SwitchesPort
    """
    physical_server = ServerSerializer(read_only=True)

    def to_representation(self, instance):
        ret = super().to_representation(instance)
        ret['physical_server'] = [ret['physical_server']]
        return ret

暫無
暫無

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

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