Django中存储数据库设置的最佳方式是什么?

4
我试图使用Django编写一个浏览器游戏,但是我在如何存储游戏设置方面遇到了一些困难。例如,游戏是基于滴答声的,我想要存储当前滴答声。为了避免内置用户授权系统出现问题(例如,我不想说用户名X不可用,因为它已经在另一个游戏中使用),我决定每个数据库只有一个游戏。据我所知,我仍然需要将这些信息存储在数据库表中,但我不确定最佳方法是什么。我似乎有两个选择:
A)将游戏作为普通模型引用其他表(例如,我的用户档案),并忽略可能存在多个游戏的可能性。这意味着虽然可能会有两个游戏行,但如果有问题会很容易破坏。
B)我有一个模型,我总是假设它只有一个行,并存储游戏的所有配置数据。该模型仅包含静态方法,而其他模型没有对其的引用。例如:
class Game(models.Model):
    current_slot = models.PositiveIntegerField(default=0)

    @staticmethod
    def slots_per_day(self):
        Genre.objects.get(id=1).current_slot

这两个选项都不太合适,但有人能告诉我哪一个更好吗?或者是否还有其他我没看到的选项?

2个回答

7
您可以更通用一些,只需拥有一个“设置”记录。这将使您能够无限扩展可以存储的设置数量。
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)

这是我知道我错过的显而易见的解决方案。有趣的是,我过去做过这件事。 - Bonnici

0
我不明白为什么每个游戏需要一个数据库。为什么不创建一个“Games”表,每个游戏对应一行,并让所有其他数据表引用与之相关联的游戏的game_id?

主要是因为用户模型涉及到整个数据库,会变得有些复杂。虽然可以这样做,但我认为会变得有点混乱。 - Bonnici
我也在使用Django开发一个游戏,我有一个全局的用户模型,然后还有一个与特定游戏实例相关联的玩家模型。 - Aaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接