使用Django存储数据库设置的最佳方法是什么?

时间:2009-12-16 01:17:37

标签: python django

我正在尝试使用Django编写一个浏览器游戏,但我对如何存储游戏设置感到有些困惑。例如,游戏是基于刻度的,我想存储当前的刻度。我已经决定每个数据库只需要一个游戏来避免内置用户授权系统的问题(例如,我不想说用户名X不可用,因为它已经在不同的游戏中使用)。据我所知,我仍然需要将这些信息存储在数据库表中,但我不知道如何做到最好。我似乎有两个选择:

A)将游戏作为其他表引用的普通模型(例如我的用户个人资料),并忽略可能存在多个游戏的可能性。这意味着在技术上可以拥有2个游戏行,但是如果有些东西会很容易破坏。

B)我有一个模型,我总是假设有一个且只有一行存储游戏的所有配置数据。此模型仅包含静态方法,其他模型都没有引用它。 E.g:

class Game(models.Model):
    current_slot = models.PositiveIntegerField(default=0)

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

这些选项对我来说似乎都不对,但有人能告诉我一个人是否优于另一个?或者,如果还有其他选项,我还没有看到呢?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我不明白你为什么每场比赛需要一个数据库。为什么不在每个游戏中有一行游戏桌,并让所有其他数据表引用他们所关联的游戏的game_id?