Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django存储数据库设置的最佳方式是什么?_Python_Django - Fatal编程技术网

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

Python 使用Django存储数据库设置的最佳方式是什么?,python,django,Python,Django,我正试图用Django编写一个浏览器游戏,但我对如何存储游戏的设置有点困惑。例如,游戏是基于刻度的,我想存储当前刻度。我决定每个数据库只需要一个游戏,以避免内置用户授权系统出现问题(例如,我不想说用户名X不可用,因为它已经在另一个游戏中使用)。据我所知,我仍然需要将这些信息存储在数据库表中,但我不确定如何最好地做到这一点。我似乎有两个选择: A) 将游戏作为其他表(例如我的用户档案)引用的正常模型,忽略可能存在多个游戏的可能性。这意味着从技术上讲,有两个游戏行是可能的,但如果有,事情会很容易打破

我正试图用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

这两个选项对我来说都不“正确”,但有人能告诉我其中一个是否比另一个好吗?或者,如果还有另一个选项我还没有看到?

您可以更一般一些,只需要有一个“设置”记录。这将允许您无限扩展可存储的设置量

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)

我不明白为什么每场比赛都需要一个数据库。为什么不创建一个每游戏一行的游戏表,并让所有其他数据表引用与之关联的游戏的游戏id?

这主要是因为用户模型在数据库范围内比较复杂。这样做是可能的,但我只是觉得会有点混乱。我还在django开发一个游戏,我有一个全局用户模型,然后还有一个绑定到特定游戏实例的玩家模型。下面是一个显而易见的解决方案,我知道我错了。有趣的是,我过去也做过这件事。