首页 > 解决方案 > 从字符串列表中选择作为 django 中 models.py 中的字段值

问题描述

我试图在我的版本 od D&D 中为一个字符编写一个模型,我希望用户只能从作为字典名称的字符串列表中进行选择

from django.conf import settings
from django.urls import reverse
from django.db import models
import misaka
from django.contrib.auth import get_user_model
User = get_user_model()
# Create your models here.

Races={
       'Dragonborn':{'attack':13,'deffence':12,'intelligence':12,'agility':12,'wisdom':13,'charisma':13},
       'Dwarf':{'attack':11,'deffence':14,'intelligence':14,'agility':10,'wisdom':15,'charisma':11},
       'Elf':{'attack':10,'deffence':8,'intelligence':15,'agility':13,'wisdom':15,'charisma':14},
       'Gnome':{'attack':15,'deffence':15,'intelligence':10,'agility':15,'wisdom':10,'charisma':10},
       'Half-Elf':{'attack':13,'deffence':10,'intelligence':13,'agility':14,'wisdom':12,'charisma':13},
       'Halfling':{'attack':12,'deffence':13,'intelligence':14,'agility':13,'wisdom':12,'charisma':11},
       'Orc':{'attack':15,'deffence':15,'intelligence':11,'agility':12,'wisdom':11,'charisma':11},
       'Human':{'attack':12,'deffence':12,'intelligence':13,'agility':13,'wisdom':13,'charisma':12}
}
Classes={
         'Barbarian':{'attack':6,'deffence':3,'intelligence':1,'agility':4,'wisdom':1,'charisma':1},
         'Bard':{'attack':2,'deffence':1,'intelligence':4,'agility':4,'wisdom':4,'charisma':4},
         'Cleric':{'attack':3,'deffence':2,'intelligence':4,'agility':1,'wisdom':4,'charisma':2},
         'Druid':{'attack':3,'deffence':2,'intelligence':3,'agility':2,'wisdom':3,'charisma':3},
         'Fighter':{'attack':6,'deffence':3,'intelligence':1,'agility':4,'wisdom':1,'charisma':1},
         'Monk':{'attack':2,'deffence':2,'intelligence':3,'agility':4,'wisdom':3,'charisma':2},
         'Paladin':{'attack':5,'deffence':5,'intelligence':2,'agility':1,'wisdom':2,'charisma':1},
         'Ranger':{'attack':4,'deffence':1,'intelligence':3,'agility':5,'wisdom':3,'charisma':1},
         'Rogue':{'attack':5,'deffence':1,'intelligence':1,'agility':7,'wisdom':1,'charisma':1},
         'Sorcerer':{'attack':2,'deffence':1,'intelligence':6,'agility':1,'wisdom':5,'charisma':1}
}

class Character(models.Model):
    user=models.ForeignKey(User,related_name='characters',on_delete=models.CASCADE)
    name=models.CharField(max_length=200)
    #Races
    #class

我如何使用“模型”。对于这样的事情?

标签: djangodjango-models

解决方案


正确的方法是创建RacesClasses建模,然后从这些模型中为角色模型提供值。

class Race(models.Model):
    name = ....
    attack = ....
    .
    .

class ClassCh(model.Model):
    name = ....
    attack = ....
    .
    .


class Character(models.Model):
   raceList = Race.objects.all()
   classList = ClassCh.objects.all()

   user=models.ForeignKey(User,related_name='characters',on_delete=models.CASCADE)
   name=models.CharField(max_length=200)
   race = models.ForeignKey(choices = raceList,on_delete=models.CASCADE)
   classch = models.ForeignKey(choices = classList,on_delete=models.CASCADE)

您也可以避免为比赛和班级创建模型,但是您需要将字典保存为字符串

race = models.CharField(choices= RACES_LIST)
class = models.CharField(choices= CLASSES_LIST)

推荐阅读