2016-12-17 14 views
0

我是Django以及Python的初学者。使用json.decode时获取0

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

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对象不能标”的错误。

这是检索它的代码:我已经使用mindthief给存储在表列表中的答案this问题

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}) 

编辑:

我的主要问题是,名单没有得到存储在数据库中。任何想法为什么?

回答

0

您需要添加一个.save()调用数据保存到数据库:

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代替。

+0

我对数据库了解不多。刚刚从新波士顿django教程的youtube学习。所以不知道关于sqlite3或PostgresSQL的任何信息。感谢random.sample确实帮助我减少了代码! – Sniper