Счетчик иностранных ключей
У меня есть класс Team, который означает группу пользователей. А отношение с User является One-to-Many.
class Team(models.Model):
member = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
Но команда может состоять из 2 и N членов. Я думаю, что писать вручную - не наш путь, потому что это зависит от количества людей, которое всегда переменное.
class Team(models.Model):
member1 = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
member2 = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
member3 = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
Как я могу сделать это более элегантно и рационально? Я имею в виду связать переменную count и ForeignKeys, ассоциированные с пользователями.
Создайте команду с одним полем team_name:
class Team(models.Model):
team_name = models.CharField(max_length=1000)
и назначить пользователей в эту команду:
class User(models.Model):
this_users_team = models.ForeignKey(Team, null=True, on_delete=models.SET_NULL)
в этом случае вы можете назначить столько пользователей в любую команду, сколько захотите
Как вы указали Team
модель, имеет ManyToOne
отношение, которое означает ForeignKey.
Но команда может состоять из 2 и N членов.
Вы должны создать две модели Team
и Member
. В модели Member
вы можете хранить всю информацию, связанную с членами клуба, такую как их возраст, пол, город и т.д.
В модели Team
можно хранить информацию, относящуюся к определенной команде, которая состоит из более чем одного Member
, т.е. имеет ManyToOne
отношение с Member
.
Models.py:
from django.db import models from django.contrib.auth.models import User class Member(models.Model): user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) def __str__(self) -> str: return f"{self.user.username}" class Team(models.Model): member = models.ForeignKey(Member, on_delete=models.SET_NULL, null=True)
Регистрация на сайте администратора:
admin.py:
@admin.register(Member) class MemberAdmin(admin.ModelAdmin): list_display = ['id', 'user'] #Also specify other fields. @admin.register(Team) class TeamAdmin(admin.ModelAdmin): list_display = ['id', 'member'] #Also specify other fields.