如何使用for循环手动将对象添加到Django模型?

时间:2019-04-17 20:02:23

标签: python django

对于Python来说相对较新,而对Django来说则相对较新,因此需要一些帮助。

我正在尝试创建一个类似于角色扮演游戏中的用户排名系统(即,用户通过获得经验值来获得等级)

到目前为止,我在我的项目中有一个应用程序,该应用程序的models.py中包含此简单模型。我已经进行了迁移,并且这个当前为空的表位于我的数据库中:

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

现在我要做的是将level 1至100(整数)添加到level_rank。因此,将有100个实例。最高等级为100。

此外,xp_threshold将每级增加50%。

因此,例如,级别1的xp_threshold为100,级别2的xp_threshold为150,级别3的xp_threshold为150,以此类推。

我不在乎数字如何取整。

我正在使用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 个答案:

答案 0 :(得分:2)

这是关于Python而不是Django。简而言之,您无法在Python中做到这一点

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

这将在4.行上抛出NameError

而不是像这样使用shell创建数据 python manage.py shell

from yourapp.models import UserLevel
UserLevel.objects.bulk_create([UserLevel(level_rank=level) for level in range(1, 101)])