Как сделать отдельную базу данных для каждого пользователя в Django? - PullRequest
0 голосов
/ 17 октября 2019

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

Я делаю приложение для отслеживания статистики баскетбола. Как это работает, вы указываете, сколько раз вы набрали количество попыток, и это добавляет его к вашему текущему проценту точности. Допустим, в прошлый раз вы были 5/10, а теперь вам 35/90. Затем этот процент возрастает с 50% до 40%. Это работает для меня, но я хочу сделать так, чтобы люди могли зарегистрироваться. Я знаю, как это сделать, но как мне сделать статистику персонализированной для каждого пользователя?

1 Ответ

2 голосов
/ 18 октября 2019

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

Каждая модель в Django по умолчанию получает поле с именем 'id', которое базы данных используют для различения разных записей. Каждый пользователь, которого вы создаете, получает новый идентификатор. Таким образом, первый пользователь получает id = 1, второй пользователь получает id = 2 и так далее. Все они хранятся в базе данных в таблице пользователей. Таким образом, каждый пользователь, который хочет отслеживать свои результаты, получит свою собственную запись в таблице пользователей. Базовый пример того, как будет выглядеть такая таблица:

----------------------
| id | name    | age |
----------------------
| 1  | John    | 23  |
| 2  | Mitch   | 15  |
| 3  | Joe     | 33  |
...

В действительности, Django использует для этого специальную модель пользователя. По умолчанию у Django есть конкретная модель, которую он использует. Подробнее об этом здесь . Учитывая, что вы уже внедрили аутентификацию, вы должны с этим справиться. Теперь, чтобы отслеживать оценки пользователей, вы можете создать в своем приложении другую модель, которая называется что-то вроде «Оценка» и может выглядеть примерно так:

from django.contrib.auth import get_user_model
from django.db import models

class Score(models.Model):
    user = models.ForeignKey(
        get_user_model(),
        on_delete=models.CASCADE,
        related_name='scores',
    )
    tries = models.PositiveSmallIntegerField()
    successful_tries = models.PositiveSmallIntegerField()

Что-то в этом роде. На этом этапе не обращайте внимания на вызов метода get_user_model (). Это новая модель, которая отслеживает множество пользователей. Вы можете создать его, выполнив Score.objects.create(user=request.user, tries=10, successful_tries=5). На каждой тренировке вы можете создавать новый объект «Оценка», который отслеживает, сколько попыток у вас было, и сколько было успешных попыток. Вы можете получить доступ ко всем из них, используя request.user.scores.all() (это то, что делает related_name). Таким образом, один пользователь может иметь от 0 до бесконечного количества объектов «Score», с которыми он связан. Каждый пользователь, находящийся в таблице пользователей вашей базы данных, и каждый счет, находящийся в таблице результатов базы данных.

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

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