Каков наилучший способ хранения настроек базы данных с Django? - PullRequest
4 голосов
/ 16 декабря 2009

Я пытаюсь написать браузерную игру с использованием Django, но я немного застрял в том, как сохранить настройки для игры. Например, игра основана на тиках, и я хочу сохранить текущий тик. Я решил, что мне нужна только одна игра на базу данных, чтобы избежать проблем со встроенной системой авторизации пользователей (например, я не хочу говорить, что имя пользователя X недоступно, поскольку оно уже используется в другой игре). Насколько я могу судить, мне все еще нужно хранить эту информацию в таблице базы данных, но я не уверен, как лучше всего это сделать. Кажется, у меня есть 2 варианта:

A) Используйте игру как обычную модель, на которую ссылаются другие таблицы (например, мой профиль пользователя), и просто игнорируйте возможность того, что может быть более 1 игры. Это будет означать, что технически возможно иметь 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 ]

7 голосов
/ 16 декабря 2009

Вы можете быть немного более универсальным и просто иметь запись "Setting". Это позволит вам увеличить количество настроек, которые вы можете хранить бесконечно.

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)
0 голосов
/ 16 декабря 2009

Я не понимаю, зачем вам нужна одна база данных на игру. Почему бы не иметь таблицу «Игры» с одной строкой на игру, и чтобы все другие таблицы данных ссылались на идентификатор_игры игры, с которой они связаны?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...