使用json.decode时获得0

时间:2016-12-17 05:26:32

标签: python json django django-models

我是Django和Python的初学者。

我首先生成50个随机数并将它们存储在列表中,然后存储在模型用户的文本字段中。

def generate(request, user_id):
    easy = [] * 55
    cnt = 0
    while cnt < 50:
        random_id = random.randint(1, 200)
        if random_id not in easy:
            easy.append(random_id)
            cnt += 1
    current_user = User.objects.get(pk=user_id)
    current_user.question_array = json.dumps(easy)
    return render(request, 'comp/question.html', {'easy': easy[0], 'question_id': 1,'user_id':user_id})

但是当我尝试从字段中检索值时,我只得到0。

当我尝试将其用作列表时,它会显示“int object不能下标”的错误。

这是检索它的代码:

def next(request,user_id, question_id):
    current_user = User.objects.get(pk=user_id)
    jsonDec = json.decoder.JSONDecoder()
    easy = jsonDec.decode(current_user.question_array)
    return render(request, 'comp/question.html',
                  {'easy': easy, 'question_id': int(question_id) + 1,'user_id':user_id})

我使用了mindthief给出的this问题的答案来将列表存储在表格中。

编辑:

我的主要问题是列表没有存储在数据库中。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要添加.save()调用以将数据保存到db:

current_user = User.objects.get(pk=user_id)
current_user.question_array = json.dumps(easy)
current_user.save()
...

顺便说一句,你也可以使用random.sample()

easy = random.sample(range(200), 50)  # in python 2.x use xrange() 

json.loads()

easy = json.loads(current_user.question_array)

如果您使用PostgreSQL(强烈推荐),您甚至可以使用JsonField

最后,如果问题存储在其他模型中(Question),请考虑改为使用ManyToManyField