Счетчик иностранных ключей

У меня есть класс 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.
Вернуться на верх