Как вручную добавить объекты в модель Django, используя цикл for? - PullRequest
0 голосов
/ 17 апреля 2019

относительно новый для Python и очень новый для Django, так что вам нужна помощь в этом.

Я пытаюсь создать систему ранжирования пользователей, аналогичную той, которую вы найдете в ролевых играх (то есть пользователь получает уровни, набирая очки опыта)

Пока в моем проекте есть приложение с этой простой моделью в своем models.py. Я уже выполнил миграцию, и эта пустая таблица находится в моей базе данных:

class UserLevel(models.Model):
    level_rank = models.IntegerField()
    xp_threshold = models.IntegerField()

Теперь я хочу добавить уровни от 1 до 100 (целые числа) к level_rank. Так что было бы 100 экземпляров. Уровень 100 будет максимальным уровнем.

Кроме того, xp_threshold будет увеличиваться на 50% на каждом уровне.

Так, например, уровень 1 будет иметь xp_threshold равный 100, уровень 2 будет иметь 150, уровень 3 будет иметь 225 и т. Д.

Меня не волнует, как округляются числа.

Я использую Django v2.0.13

Пока у меня есть это:

class UserLevel(models.Model):
    level_rank = models.IntegerField()
    xp_threshold = models.IntegerField()

    levels_range = range(1,101)

    for level in levels_range:
        UserLevel.objects.create(level_rank=level)

Но это дает мне NameError о том, что UserLevel не определен.

Я знаю, что мог бы вручную добавить эти данные в админку Django, но на 100 уровней это займет много времени, и я знаю, что есть лучший способ сделать это.

Есть идеи?

Спасибо!

1 Ответ

2 голосов
/ 17 апреля 2019

Речь идет о Python, а не о Джанго.Просто вы не можете сделать это в Python

class MyAwesomeClass:
    a = 1
    print(a)
    print(MyAwesomeClass.a)

, это вызовет бросок NameError на 4. line

Вместо этого используйте shell для создания таких данных, как python manage.py shell

from yourapp.models import UserLevel
UserLevel.objects.bulk_create([UserLevel(level_rank=level) for level in range(1, 101)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...