我有一个包含JSON的外部网址。
所以我的问题是:如果我创建了与JSON的键匹配的以下模型,如何将JSON数据保存到我的Django管理页面?
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=254)
image_url = models.ImageField(blank=True)
title = models.CharField(max_length=254)
bio = models.CharField(max_length=20000)
vote = models.IntegerField()
我的目标是能够创建一个投票应用,让您可以为JSON定义的每个人投票。
以下是此问题的较长版本: https://stackoverflow.com/questions/46149309/create-object-models-from-external-json-link-django
答案 0 :(得分:1)
如果我正确理解您的问题,您可以使用模型序列化器。
class PersonSerializer(serializers.ModelSerializer):
class Meta:
model = Person
然后您可以使用此PersonSerializer使用您从REST API获得的person_json
对象(在本例中为json对象数组)填充模型。
personSaver = PersonSerializer(data=person_json, many=True)
if personSaver.is_valid():
personSaver.save()
答案 1 :(得分:0)
我能够通过运行以下内容来解决这个问题:
import json
from rest_framework.views import APIView
from rest_framework.response import Response
from urllib.request import urlopen
from .models import Person
from .serializers import PersonSerializer
class PersonView(APIView):
def get(self, request):
data = urlopen("<JSONURLHERE>").read()
output = json.loads(data)
persons = Person.objects.all()
serializer = PersonSerializer(persons, many=True)
for person in output:
if person['id'] not in [i.id for i in persons]:
Person.objects.create(id=person['id'], name=person['name'], image_url=person['image_url'],
title=person['title'], bio=person['bio'])
return Response(serializer.data)
我基本上使用JSON创建对象。