Django «Модель Singleton» для хранения пользовательских настроек - PullRequest
1 голос
/ 04 февраля 2020

Я создаю веб-приложение с Django. Я хотел бы иметь возможность сохранять конечные настройки пользователя для моего приложения. Сейчас я использую модель настроек, которая содержит все, что мне нужно для приложения.
Кажется, все в порядке, но я не думаю, что это правильный путь, потому что у меня может быть вторая строка в моей базе данных, и я не хочу этого.
Я думаю об использовании файла, но это не так так же легко управлять, как таблица в базе данных.

Может ли кто-нибудь помочь мне с этим, пожалуйста?

Спасибо! :)

Луисон

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Если я правильно понимаю ваш вопрос, вы заинтересованы в управлении настройками приложения django через редактируемый, простой в обновлении интерфейс.

Популярный существующий подход к этому реализован django -constance . Он может использовать вашу базу данных или Redis для хранения настроек и делает их редактируемыми через django admin. Вы можете посмотреть документацию здесь .

django-constance admin example

В конечном счете, подход к использованию таблицы базы данных для хранения настроек конфигурации хорош. Однако проблема наличия одной строки может показаться странной, поэтому подход django -constance заключается в использовании схемы ключ / значение, в которой каждый отдельный ключ конфигурации имеет свою собственную строку в таблице.

0 голосов
/ 04 февраля 2020

Вы можете пометить поле user как unique=True. Это в основном то, что делает поле OneToOneField [Django -doc] . Таким образом, это означает, что у пользователя есть самое большее одна связанная запись:

from django.conf import settings

class UserSettings(models.Model):
    user = <b>models.OneToOneField(</b>
        settings.USER_MODEL,
        on_delete=models.CASCADE
    <b>)</b>
    # &hellip;

Если вы, таким образом, намереваетесь вставить вторую строку для того же пользователя, это вызовет ошибку (учитывая база данных обеспечивает такое ограничение, но почти все базы данных делают это). Более того, если вы используете форму, Django также выполнит такую ​​проверку.

...