2016-12-17 7 views
0

Я новичок в Django, а также Python.Получение 0 при использовании json.decode

Сначала я генерирую 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.

Когда я пытаюсь использовать его в качестве списка он показывает ошибку «ИНТ объект не может быть индекс».

Это код для его получения:

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

Я использовал ответ на вопрос this дается mindthief для хранения списка в таблице.

Edit:

Моя главная проблема заключается в том, что список не получает хранится в базе данных. Любые идеи почему?

ответ

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 (настоятельно рекомендуется), вы можете даже использовать a JsonField.

И, наконец, если вопросы хранятся в другой модели (Question), вместо этого используйте вместо этого ManyToManyField.

+0

Я мало знаю о базе данных. Просто начал учиться на youtube из учебников django thenewboston. Так что не знаю ничего о sqlite3 или PostgresSQL. Спасибо, что random.sample действительно помог мне уменьшить код! – Sniper