Django中的JSONField即使在POST请求后仍保持为空

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django中的JSONField即使在POST请求后仍保持为空相关的知识,希望对你有一定的参考价值。

我在Django中有一个带有JSONField的模型。如果我使用Django Rest UI通过浏览器发布POST,数据将毫无问题地输入到模型中。但是,当我在应用程序中使用Python的request.post时,除JSONField数据外的所有内容都存储在模型中。

这是我的模特

from django.db import models
from django.contrib.postgres.fields import JSONField
class Scans(models.Model):
    Name = models.CharField(max_length=20)
    Server = models.CharField(max_length=20)
    Results = JSONField(default=dict)
    Report_Url = models.URLField(max_length=30)`

这是我的序列化器

from rest_framework import serializers 
from .models import Scans   
class ScansSerializer(serializers.ModelSerializer):
    class Meta:
        model = Servers
        fields = '__all__'

这是我的观点

class ScansData(APIView):
    def get(self, request):
        scans = Scans.objects.all()
        serializer = ScansSerializer(scans, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

    def post(self, request):
        serializer = ScansSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request):
        scans = Scans.objects.all()
        scans.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

这是我的要求

data = 
    "Name": "dodo",
    "Server": "ubuntu",
    "Report_Url": "https://127.0.0.1:8000/about/"

jsonval = 
    "Results": 
        "Severity_High": 8,
        "Severity_Medium": 7,
        "Severity_Low": 5
    

requests.post('http://127.0.0.1:8000/scans/', data=data, json=jsonval)

URL

urlpatterns = [    
path('scans/', ScansData.as_view()),
]

使用requests.post后看到的内容>


    "id": 10,
    "Name": "dodo",
    "Server": "ubuntu",
    "Results": ,
    "Report_Url": "https://127.0.0.1:8000/about/"

我在Django中有一个带有JSONField的模型。如果我使用Django Rest UI通过浏览器发布POST,数据将毫无问题地输入到模型中。但是,当我在...

答案
None
另一答案
None
另一答案
None

以上是关于Django中的JSONField即使在POST请求后仍保持为空的主要内容,如果未能解决你的问题,请参考以下文章

ArrayField 中的 Django JSONField

使用 JSONField 中的列表在 Django 中查找对象

django 无法访问模板中的 jsonfield 数据

如何在具有 Jsonfield 的模型中发布 django rest 中的数据

在 django rest 框架中更新 JSONField

Django:在过滤器和搜索中使用 JSONField 属性