我的输入是使用JSON POST请求

{
  "rawdata": [
    {
      "id": "89729999",
      "name": "testname",
      "product": "testproduct",
      "modified_at": "2023-12-14T03:00:00.000Z",
      "modified_by": "personname",
      "asset": {
        "configname": ["testconfig"],
        "serialnumber": ["testserialnumber"],
        "owner": ["owner1","owner2"]
      }
    }
  ]
}

model.py

class Host(models.Model):
    id                = models.CharField(primary_key=True, max_length=15)
    name              = models.CharField(max_length=80)
    product           = models.CharField(max_length=50)
    modified_at       = models.DateTimeField()
    modified_by       = models.CharField(max_length=50)

class Hostinfo(models.Model):
    fk                = models.ForeignKey(Host, on_delete=models.CASCADE) ## id 
    parameter_section = models.CharField(max_length=40)
    parameter         = models.CharField(max_length=80)
    parameter_index   = models.IntegerField()  ## index 
    value             = models.CharField(max_length=200, null=True)
    modified_at       = models.DateTimeField()
    modified_by       = models.CharField(max_length=50)

View.py

@api_view(('POST',))
def hostrequest(request):
    data=request.data.get('rawdata')
    print(data) 
    try:   
        for item in data:
            host=Host()
            host.cmdbid = item['id']
            host.name = item['name']
            host.product =item['product']
            host.modified_at= item['modified_at']
            host.modified_by= item['modified_by']
            host.save()
            hostparameter = Hostinfo()
           for parameter_section in item:
                if parameter_section != "id" and parameter_section != "name" and parameter_section != "product" and parameter_section != "modified_at" and parameter_section != "modified_by":
                    detailData = item[parameter_section]
                    for parameter in detailData:
                        parameters = detailData[parameter]
                        for parameter_index in parameters:
                            value = parameters[parameter_index]
                            hostparameter.fk += item['id']
                            hostparameter.parameter_section += parameter_section['parameter_section']
                            hostparameter.parameter += parameter['parameter']
                            hostparameter.parameter_index += parameter_index['parameter_index']
                            hostparameter.value += value['value']
                            hostparameter.save()
            response_data={"error":False,"Message":"Updated Successfully"}
            return JsonResponse(response_data,safe=False,status=status.HTTP_201_CREATED)
    except:
        response_data={"error":True,"Message":"Failed to Update Data"}
        return JsonResponse(response_data,safe=False)

i executed view script without any issue but i'm only able insert value into host. But not able insert into Hostinfo.
Anyone could help on this why i not able insert into Hostinfo. Any issue on this script on View.py ?

HostInfo表的最终输出

fk parameter_section parameter parameter_index value modified_at
89.. asset configname 0 testco. 2023-12-14..
89.. asset owner 0 owner1 2023-12-14..
89.. asset owner 1 owner2 2023-12-14..

[Output of scripts]1

推荐答案

注释掉了带有数据的行,因为我将JSON对象移出了视图.使用了Item[‘ASSET’]条件,判断它是否存在,并在循环中提取key, value,然后在嵌套循环中迭代value.因为在使用SAVE()时,我只保存了最后一条记录,所以我使用Hostinfo.objects.create来保存(您也可以将其应用于主机.数据被保存到数据库中).

def hostrequest(request):
    #data = request.data.get('rawdata')
    try:
        for item in data['rawdata']:
            host = Host()
            host.id = item['id']
            host.name = item['name']
            host.product = item['product']
            host.modified_at = item['modified_at']
            host.modified_by = item['modified_by']
            host.save()
            r = Host.objects.get(id=item['id'])
            if item['asset']:
                for key, value in item['asset'].items():
                    if key != 'serialnumber':
                        for i in range(len(value)):
                            Hostinfo.objects.create(fk=r, parameter_section='asset',
                                                    parameter=key, parameter_index=i,
                                                    value=value[i],
                                                    modified_at=item['modified_at'])

                response_data = {"error": False, "Message": "Updated Successfully"}
                return JsonResponse(response_data, safe=False, status=status.HTTP_201_CREATED)


    except:
        response_data = {"error": True, "Message": "Failed to Update Data"}
        return JsonResponse(response_data, safe=False)

Python相关问答推荐

Pandas 第二小值有条件

对某些列的总数进行民意调查,但不单独列出每列

需要计算60,000个坐标之间的距离

标题:如何在Python中使用嵌套饼图可视化分层数据?

有症状地 destruct 了Python中的regex?

OR—Tools CP SAT条件约束

为一个组的每个子组绘制,

如何在表中添加重复的列?

Python Pandas获取层次路径直到顶层管理

在Python中使用if else或使用regex将二进制数据如111转换为001""

python panda ExcelWriter切换动态公式到数组公式

巨 Python :逆向猜谜游戏

处理Gekko的非最优解

使用类型提示进行类型转换

多个矩阵的张量积

如何防止html代码出现在quarto gfm报告中的pandas表之上

read_csv分隔符正在创建无关的空列

我怎么才能用拉夫分拣呢?

对于标准的原始类型注释,从键入`和`从www.example.com `?

如何在Quarto中的标题页之前创建序言页