Django Много пользователей одной модели.Модель о пользователе - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь выяснить, сколько пользователей может быть связано с одним экземпляром модели.

У меня есть проект спортивного клуба.Есть много пользователей (администратор и персонал) только один клуб.Кажется, я не могу сформировать отношения один-на-один с моделью User.Я хочу фильтровать в основном по клубу.Скажем, если 3 клуба используют проект, каждый клуб хотел бы быть разделенным клубом, а не пользователем.

Ниже приведена упрощенная версия моих моделей.Я также попытался добавить ForeignKey в клуб и пойти другим путем.

Class Club(models.model):
    name = models.CharField(max_length=40, null=True)


Class User(AbstractBaseUser):
    name = models.CharField(max_length=40, null=True)
    club = models.ForeignKey(Club, on_delete=models.CASCADE)

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вы правильно определяете свои модели.Когда вы создаете ForeignKey, каждый экземпляр модели, с которой он связан (здесь ваша модель Club), имеет доступ к экземплярам, ​​связанным с ним через объект Manager.Вы можете определить аргумент «related_name» в определении поля ForeignKey, чтобы ваши объекты клуба имели доступ к пользователям, связанным с ними, через пользовательское имя (а не имя по умолчанию):

Class Club(models.model):
    name = models.CharField(max_length=40, null=True)

Class User(AbstractBaseUser):
    name = models.CharField(max_length=40, null=True)
    club = models.ForeignKey(Club, related_name="members", on_delete=models.CASCADE)

YouЗатем можно получить доступ к связанным пользователям с помощью club.members.all, предполагая, что «club» - это имя объекта контекста club, переданного в шаблон, а «members» - related_name отношения ForeignKey модели пользователя с Club.В качестве тривиального примера, если вы хотите перечислить членов клуба, вы можете сделать следующее:

{% for member in club.members.all %}
    <p>{{member.name}} is a member</p>
{% endfor %}

Проверьте эту ссылку для получения дополнительной информации об отношениях ForeignKey: https://docs.djangoproject.com/en/2.2/topics/db/queries/#following-relationships-backward

1 голос
/ 20 июня 2019

Поскольку существует только один клуб, но различные пользователи, я считаю, что ваша модель должна оставаться такой же, но в модели пользователя вы можете назначать разные роли для разных пользователей в клубе

Class User(AbstractBaseUser):
    name = models.CharField(max_length=40, null=True)
    club = models.ForeignKey(Club, on_delete=models.CASCADE)
    is_staff = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...