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

4 投票
2 回答
1096 浏览
提问于 2025-04-15 17:04

我正在尝试用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 个回答

0

我不太明白为什么每个游戏都需要一个单独的数据库。为什么不可以有一个“游戏”表,每个游戏占一行,然后其他所有的数据表都通过游戏的ID来关联呢?

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)

撰写回答