Добавить поле ForeignKey для пользователя по умолчанию без его изменения?

Я использую модель пользователя по умолчанию и создал собственную модель под названием Team. Пользователь может быть только в одной команде, но в команде может быть много пользователей. Поэтому я должен создать поле ForeignKey в модели User.

Дело в том, что я использую пользователя по умолчанию, просто импортируя пользователя с from django.contrib.auth.models import User

Какой самый простой способ добавить поле ForeignKey в модель пользователя по умолчанию? Нужно ли расширять модель пользователя по умолчанию?

Или есть способ добавить поле ForeignKey в Team и поменять отношения между пользователем и командой?

2 ответа

Решение

Честно говоря, когда вы работаете с пользовательской моделью Django по умолчанию, всегда лучше создать пользовательскую пользовательскую модель, которую вы можете изменить проще. Ниже приведен простой пример того, как вы можете изменить свой класс User с помощью AbtractBaseUser. Если вы хотите добавить внешний ключ, просто используйте ForeignKey вместо типов данных ниже.

from __future__ import unicode_literals
from django.utils import timezone
from django.contrib.auth.models import (AbstractBaseUser,PermissionsMixin)
from django.db import models

class User(AbstractBaseUser, PermissionsMixin):

    email = models.EmailField(unique=True)
    username = models.CharField(max_length=7, unique=True)
    formattedusername = models.CharField(max_length=11, unique=True, primary_key = True)
    first_name = models.CharField(max_length=40)
    last_name = models.CharField(max_length=140)
    date_joined = models.DateTimeField(default=timezone.now)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    facility = models.CharField(max_length=140)
    jobdescription = models.CharField(max_length=140)
    positiondescription = models.CharField(max_length=140)
    coid = models.CharField(max_length=5)
    streetaddress = models.CharField(max_length=140)



    USERNAME_FIELD = 'username'

    class Meta:
        app_label = 'accounts'
        db_table = "user"

#    REQUIRED_FIELDS = "username"

    def __str__(self):
        return "@{}".format(self.username)

На мой взгляд, лучший способ добиться того, чего вы хотите - это использовать промежуточную таблицу. Поэтому вы бы создали свой Team модель как обычно, а затем создайте другую модель с двумя внешними ключами к обоим User а также Team, Это пример, он может измениться, не стесняйтесь изменить его в соответствии с вашими потребностями.

class Group(models.Model):
   group = models.ForeignKey(User, on_delete=models.CASCADE)
   group = models.ForeignKey(Team, on_delete=models.CASCADE)


class Team (models.Model):
   group = models.ForeignKey(Group, on_delete=models.CASCADE)
   #your other fields
Другие вопросы по тегам