Добавить поле 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