Django:for循环和POST请求创建功能

时间:2018-07-07 13:00:50

标签: python json django

在项目中,存在一个数据库中具有现有实例的模型。

class Instagram(models.Model):
    userid = models.CharField(max_length=255, unique=True)
    username = models.CharField(max_length=50, blank=True, null=True)

还有另一种模型,到目前为止没有任何局限性

class InstagramAgesAnalitics(models.Model):    
    instagram = models.ForeignKey(Instagram)
    age = models.CharField(max_length=10)    
    viewer_percentage = models.DecimalField(default=0, max_digits=5, decimal_places=2)

现在我需要从json文件中存储的值中创建InstagramDemographicsAnalitics模型的新实例。为此,我编写了一个函数,该函数使用for循环并在实例字段中替换所需的键值。

example.json

{
    "@nightcrvwlxr": {                              
        "userId": "5697152",                
        "content_persons_statistic": {
            "ages": {
                "45-64": 0.016358024691358025,
                "18-24": 0.37570950015055704,
                "25-34": 0.2789897621198434,
                "13-17": 0.2103470340258958,
                "35-44": 0.11859567901234568
            },                      
            "genders": {
                "MALE": 0.6046939714680166,
                "FEMALE": 0.39530602853198343
            }
        }           

    }
}

views.py

from django.shortcuts import render
import json
from django.http import HttpResponse, HttpResponseRedirect
from .models import InstagramDemographicsAnalitics, Instagram, InstagramAgesAnalitics

def get_ida_instance(request):

    with open('/home/jekson/projects/jsontest/example.json', encoding='utf-8') as f:
        data = json.loads(f.read())

    if request.method == 'POST':
        for key, value in data.items():
            print(value['userId'])
            instagram = Instagram.objects.get(userid=value['userId'])
            ages = (value["content_persons_statistic"]['ages'])
            for key, value in ages.items():
                ida = InstagramAgesAnalitics()
                ida.instagram = instagram
                ida.age_group = key
                ida.viewer_percentage = float(str(value))
                ida.save()
                print(key + ":" + " " + str(value))
                return HttpResponse("Succesful")

    return render(request, 'ida.html')

template.html

<form method="post" action="">
{% csrf_token %}
<button type="submit">Click Me!</button>

当我单击СleckMe按钮时,我获得成功,但是数据库中仅出现一个模型实例。但根据这些数据,我希望出现四个:

"45-64": 0.016358024691358025,
"18-24": 0.37570950015055704,
"25-34": 0.2789897621198434,
"13-17": 0.2103470340258958,
"35-44": 0.11859567901234568

如果在 get_ida_instance 中用 print(键+“:” +“” + str(值)) 替换创建实例的代码>功能,然后在控制台中看到我需要的所有值。为什么不创建其余实例?

1 个答案:

答案 0 :(得分:3)

您在内部循环中返回,因此它只能执行一次。将返回语句移回两个缩进级别。