首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DRF序列化程序不显示默认HTML表单页API中的字段(外键和many2many)。字段在GET中可用

DRF序列化程序不显示默认HTML表单页API中的字段(外键和many2many)。字段在GET中可用
EN

Stack Overflow用户
提问于 2020-02-26 07:51:27
回答 2查看 308关注 0票数 1

DRF序列化程序包含一个组和清单字段,它们是many2many和外键。它在默认DRF HTML表单中缺失,但在GET view中可用。目前,串行化器中开启了深度字段。如果我要删除深度,那么外键在默认的超文本标记语言表单中是可用的,但仍然缺少组many2many字段。我需要这两个字段后调用或在DRF HTML的形式。

我是否必须写一些create方法,但我不想为外键和many2many创建新的记录,只想利用现有的字段。

我的序列化程序类。

代码语言:javascript
运行
复制
class MainHostSerializer(serializers.ModelSerializer):
    class Meta:
        model = MainHost
        fields = (
            'host_id', 
            'host_name',
            'inventory',
            'group'
        )  
        # depth = 2 

默认DRF HTML表单的原始视图

代码语言:javascript
运行
复制
{
    "host_id": null,
    "host_name": ""
}

模型类

代码语言:javascript
运行
复制
class MainHost(models.Model):
    host_id =  models.IntegerField(verbose_name='HOST ID', primary_key=True)
    host_name =  models.CharField(verbose_name='HOST NAME', max_length=512)
    inventory = models.ForeignKey(related_name='inv_ins', on_delete=models.SET_NULL, to='hosts.MainInventory', blank=True, null=True)
    group = models.ManyToManyField(MainGroup, related_name='hostgroups', through ='HostGroup')
EN

回答 2

Stack Overflow用户

发布于 2020-03-04 04:52:59

MainHost序列化程序的Create方法

代码语言:javascript
运行
复制
def create(self, validated_data):
    inv_data = validated_data.pop('inventory')
    inv_res = MainInventory.objects.create(**inv_data)

    group_data = validated_data.pop('group')
    host_data = MainHost.objects.create(inventory = inv_res, **validated_data)

    for g_data in group_data:
        inv_data = g_data.pop('inv_id')
        inv = MainInventory.objects.create(**inv_data)
        group_res = MainGroup.objects.create(inv_id = inv, **g_data)
        print(validated_data)
        HostGroup.objects.create(host = host_data, group =  group_res)
票数 0
EN

Stack Overflow用户

发布于 2020-03-04 04:57:46

这是JSON示例

代码语言:javascript
运行
复制
{
    "count": 1692,
    "next": "http://127.0.0.1:8000/api/mainhost/?page=2",
    "previous": null,
    "results": [
        {
            "host_id": 4087,
            "host_name": "10.240.144.2",
            "inventory": {
                "inv_id": 91,
                "inv_name": "GNS Switches (TestNet)",
                "total_hosts": 539,
                "total_groups": 1,
                "org_name": "ABC_TestNet",
                "description": "Inventory of ABC switches on Testnet",
                "inv_variables": "environ: testnet"
            },
            "group": [
                {
                    "group_id": 280,
                    "group_name": "aruba",
                    "total_hosts": 539,
                    "total_groups": 0,
                    "inv_id": {
                        "inv_id": 91,
                        "inv_name": "ABC Switches (TestNet)",
                        "total_hosts": 539,
                        "total_groups": 1,
                        "org_name": "ABC_TestNet",
                        "description": "Inventory of ABC switches on Testnet",
                        "inv_variables": "environ: testnet"
                    },
                    "description": "imported",
                    "group_variables": "{}",
                    "groupinv_name": "ABC Switches (TestNet)",
                    "groupinv_description": "",
                    "groupinv_source": "scm",
                    "groupinv_path": "TEC/GNS/Switches/testnet.ini"
                }
            ],
            "description": "imported",
            "foreman_group": "[{'id': 280, 'name': 'aruba'}]",
            "host_variables": "{}",
            "ansible_facts": "{}"
        }
    ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60404842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档