gpt4 book ai didi

python - 在 Django 中指定一组相关字段时公认的最佳实践是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 07:08:25 26 4
gpt4 key购买 nike

假设我在 Django 中为一个角色扮演游戏创建一个“角色”模型,我希望所有属性(力量、敏捷、耐力等)都以类似的方式定义,并且能够以类似的方式处理方式。

显然我可以这样做:

intelligence = IntegerRangeField(min_value=1, max_value=10)
wits= IntegerRangeField(min_value=1, max_value=10)
resolve = IntegerRangeField(min_value=1, max_value=10)
strength = IntegerRangeField(min_value=1, max_value=10)
dexterity = IntegerRangeField(min_value=1, max_value=10)
stamina = IntegerRangeField(min_value=1, max_value=10)
presence = IntegerRangeField(min_value=1, max_value=10)
manipulation = IntegerRangeField(min_value=1, max_value=10)
composure = IntegerRangeField(min_value=1, max_value=10)

整数范围字段 definition

但这并不是特别的DRY .这也意味着当我添加大约 30 种相似的技能时,我将变得更加干练,并且容易出错。

这些似乎不值得通过外键创建(这是解决方案 here ),因为我需要为每个属性等指定 9 个。

是否已经有 DRY 解决方案?还是我需要自己动手?

编辑:
我对属性和技能的主要用途是为技能检查提供总数,例如,如果我想知道为编程掷多少骰子,我可能会指定它使用字符intelligence+computers 属性和技能,例如来自“任务”列表(例如属性和技能的其他组合)显示该角色可以执行的前五项。


编辑:

看起来遵循 M2M 路线导致我过度规范化。谁能suggest improvements

最佳答案

对于需要重复字段的这种情况(如@RonaldOldenburger 建议),您可以使用多对多字段关系。例如:

class Skill(models.Model):
name = models.CharField(max_length=255)
value = IntegerRangeField(min_value=1, max_value=10)

class Character(models.Model):
name = models.CharField(max_length=255)
skill = models.ManyToManyField(Skill)

如果您使用 modelform 创建一个 Character 模型实例,那么您可以使用 model formset factory向其添加 Skill

关于python - 在 Django 中指定一组相关字段时公认的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28169829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com