【问题标题】:Getting 0 when using json.decode使用 json.decode 时得到 0
【发布时间】:2016-12-17 05:26:31
【问题描述】:

我是 Django 和 Python 的初学者。

我首先生成 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 object cannot be subscript”的错误。

这是检索它的代码:

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 问题的答案将列表存储在表格中。

编辑:

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

【问题讨论】:

    标签: python json django django-models


    【解决方案1】:

    您需要添加.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

    【讨论】:

    • 我对数据库了解不多。刚从新波士顿 django 教程开始从 youtube 学习。所以对sqlite3或PostgresSQL一无所知。感谢 random.sample 真的帮助我减少了代码!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多