我正在尝试使用Django编写一个浏览器游戏,但我对如何存储游戏设置有点困惑.例如,游戏是基于刻度的,我想存储当前的刻度.我已经决定每个数据库只需要一个游戏来避免内置用户授权系统的问题(例如,我不想说用户名X不可用,因为它已经在不同的游戏中使用).据我所知,我仍然需要将这些信息存储在数据库表中,但我不知道如何做到最好.我似乎有两个选择:
A)将游戏作为其他表格引用的普通模型(例如我的用户个人资料),并忽略可能存在多个游戏的可能性.这意味着在技术上可以有2个游戏行,但如果有的话会很容易破坏.
B)我有一个模型,我总是假设有一个且只有一行存储游戏的所有配置数据.此模型仅包含静态方法,其他模型都没有引用它.例如:
class Game(models.Model):
current_slot = models.PositiveIntegerField(default=0)
@staticmethod
def slots_per_day(self):
Genre.objects.get(id=1).current_slot
Run Code Online (Sandbox Code Playgroud)
这些选项对我来说似乎都不对,但任何人都可以告诉我一个人是否比另一个更好?或者,如果还有其他选项,我还没有看到呢?
你可能会更通用,只有一个"设置"记录.这将允许您扩展可以无限存储的设置数量.
class Setting(models.Model):
name = models.CharField(max_length=50)
value = models.TextField()
# ...
# Get the current slot setting
current_slot = Setting.objects.get(name='current_slot').value
# ...
# Or wrap it in a helper method
def get_setting(name, default_value):
try:
return Setting.objects.get(name=name).value
except:
return default_value
current_slot = get_setting('current_slot', 0)
Run Code Online (Sandbox Code Playgroud)