![](/img/trans.png)
[英]how to iterate thru a json Post with multiple objects and how do I assign it to a variable?
[英]How do I POST multiple JSON objects
我想知道如何 go 关于使用 django-restframework 将多个 JSON 对象发布到服务器。 我的数据表 model 如下所示。
class module(models.Model):
uploaded_by=models.ForeignKey(ChangeLog,on_delete=models.CASCADE,null=True)
panel_manufacturer= models.CharField(max_length=100,null=True, blank = True)
panel_model= models.CharField(max_length=100,null=True, blank = True)
panel_serial_number = models.CharField(max_length=100)
label_pmpp=models.FloatField(null=True, blank = True)
label_lower_tolerance=models.FloatField(null=True, blank = True)
label_upper_tolerance=models.FloatField(null=True, blank = True)
label_isc=models.FloatField(null=True, blank = True)
label_voc=models.FloatField(null=True, blank = True)
label_maximum_system_voltage=models.FloatField(null=True, blank = True)
additional_panel_information = JSONField(null=True, blank = True)
def __str__(self):
return self.panel_serial_number
而对应的序列化器就是这样
class module_Serializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name="pvlabs_testdata:module-detail")
uploaded_by = ChangeLog_Serializer(required=False)
class Meta:
model = module
fields = '__all__'
validators = [module_validator]
def create(self, validated_data):
uploaded_by_data = {"uploaded_by":self.context['request'].user, "upload_timestamp":datetime.now()}
uploaded_by_instance = ChangeLog.objects.create(**uploaded_by_data)
module_instance=module.objects.create(uploaded_by=uploaded_by_instance, **validated_data)
return module_instance
当我 go 关于发布 JSON 时,如下所示
{
"panel_manufacturer": "XYZ",
"panel_model": null,
"panel_serial_number": "EFG",
"label_pmpp": null,
"label_lower_tolerance": null,
"label_upper_tolerance": null,
"label_isc": null,
"label_voc": null,
"label_maximum_system_voltage": null,
"additional_panel_information": null
},
{
"panel_manufacturer": "XYZ",
"panel_model": null,
"panel_serial_number": "ABC",
"label_pmpp": null,
"label_lower_tolerance": null,
"label_upper_tolerance": null,
"label_isc": null,
"label_voc": null,
"label_maximum_system_voltage": null,
"additional_panel_information": null
},
{
"panel_manufacturer": "XYZ",
"panel_model": null,
"panel_serial_number": "ABC",
"label_pmpp": null,
"label_lower_tolerance": null,
"label_upper_tolerance": null,
"label_isc": null,
"label_voc": null,
"label_maximum_system_voltage": null,
"additional_panel_information": null
}
我总是收到一个错误,上面写着“预期的字典,得到列表”。
我设法使用列表序列化程序为此创建了一个解决方案。 所以在我的视图文件中,它的编码如下
class module_ViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = module.objects.all()
serializer_class = module_Serializer
permission_classes = [permissions.IsAuthenticated | HasAPIKey]
def get_serializer(self, *args, **kwargs):
if isinstance(kwargs.get("data", {}), list):
kwargs["many"] = True
temp= kwargs.get("data")
for i in range(len(kwargs.get("data"))):
for key, value in temp[i].items():
if " " in key or key.islower()==0:
n_key=str(key).replace(" ", "_").title().lower()
kwargs.get("data")[i][n_key] = kwargs.get("data")[i].pop(key)
return super(module_ViewSet, self).get_serializer(*args, **kwargs)
对于我的序列化程序,我编码如下
from rest_framework import serializers
from django_restql.mixins import DynamicFieldsMixin
class BulkModuleSerializer(DynamicFieldsMixin, serializers.ListSerializer):
def create(self, validated_data):
result=[]
for validated_datas in validated_data:
uploaded_by_data = {"uploaded_by":self.context['request'].user, "upload_timestamp":datetime.now()}
uploaded_by_instance = ChangeLog.objects.create(**uploaded_by_data)
module_instance=module.objects.create(uploaded_by=uploaded_by_instance, **validated_datas)
result.append(module_instance)
return result
class module_Serializer(DynamicFieldsMixin, serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name="pvlabs_testdata:module-detail")
uploaded_by = ChangeLog_Serializer(required=False)
class Meta:
model = module
fields = '__all__'
validators = [module_validator]
list_serializer_class = BulkModuleSerializer
def create(self, validated_data):
uploaded_by_data = {"uploaded_by":self.context['request'].user, "upload_timestamp":datetime.now()}
uploaded_by_instance = ChangeLog.objects.create(**uploaded_by_data)
module_instance=module.objects.create(uploaded_by=uploaded_by_instance, **validated_data)
return module_instance
这似乎对我有用。
您已将 JSON 数据放在方括号内。 例子:
[
{
"panel_manufacturer": "XYZ",
"panel_model": null,
"panel_serial_number": "ABC",
"label_pmpp": null,
"label_lower_tolerance": null,
"label_upper_tolerance": null,
"label_isc": null,
"label_voc": null,
"label_maximum_system_voltage": null,
"additional_panel_information": null
},
{
"panel_manufacturer": "XYZ",
"panel_model": null,
"panel_serial_number": "ABC",
"label_pmpp": null,
"label_lower_tolerance": null,
"label_upper_tolerance": null,
"label_isc": null,
"label_voc": null,
"label_maximum_system_voltage": null,
"additional_panel_information": null
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.