Как расширить Пользователь (AbstractBaseUser) с OnetoOneField? - PullRequest
0 голосов
/ 27 марта 2019

Я хочу связать мою модель профиля с моделью пользователя из класса AbstractUserModel с OnetoOneFields.Является ли это возможным?Или любое решение с этой проблемой.Вот мой models.py

from django.db import models
#from django.contrib.auth.models import User
from django.contrib.auth.models import (
    AbstractBaseUser
)


class User(AbstractBaseUser):
    email       = models.EmailField(max_length=255, unique=True)
    active      = models.BooleanField(default=True) 
    staff       = models.BooleanField(default=False)
    admin       = models.BooleanField(default=False) 
    timestamp   = models.DateTimeField(auto_now_add=True)

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = []

    def __str__(self):
        return self.email

    def get_full_name(self):
        return self.email

    def get_short_name(self):
        return self.email

    @property
    def is_staff(self):
        return self.staff

    @property
    def is_admin(self):
        return self.admin

    @property
    def is_active(self):
        return self.active



class Profile(models.Model):
    #HERE
    user                = models.OneToOneField(AbstractBaseUser, on_delete=models.CASCADE)
    nama_lengkap        = models.CharField(max_length=100, blank=True, null=True)
    tgl_lahir           = models.DateField(null=True, blank=True)
    alamat              = models.CharField(max_length=255)
    foto_profil         = models.ImageField(upload_to='foto_profil',blank=True)
    jabatan             = models.ForeignKey(Jabatan, on_delete=models.CASCADE)

    def __str__(self):
        return "{} - {}".format(self.user, self.nama_lengkap)

, когда я переношу это, просто покажу несколько сообщений об ошибках, например:

SystemCheckError: Проверка системы выявила некоторые проблемы:

ОШИБКИ: пользователи.Profile.user: (fields.E300) Поле определяет отношение с моделью 'AbstractBaseUser', которое либо не установлено, либо является абстрактным.users.Profile.user: (fields.E307) Поле users.Profile.user было объявлено с ленивой ссылкой на 'auth.abstractbaseuser', но приложение 'auth' не предоставляет модель 'abstractbaseuser'.

заранее спасибо

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Однако я рекомендую вам сделать это по-другому: Вместо создания второй модели User, расширьте существующую:

#models.py
class ProfileUser(AbstractUser):
    extra_field = models.CharField(max_length=100)
    username = models.CharField(max_length=20) # modifing existing field
```
```
#settings.py
AUTH_USER_MODEL = "app_name.ProfileUser"
0 голосов
/ 27 марта 2019

вам нужно заменить

user                = models.OneToOneField(AbstractBaseUser, on_delete=models.CASCADE)

на

user                = models.OneToOneField(User, on_delete=models.CASCADE)
...