ValueError: Can not assign "'1'": "User.campus" must be a "Campus" instance. Error in Super User registration in Django

0

I'm developing an application where the user needs to be on a campus. However, when the superuser is created on the terminal, an instance error occurs.

Note: The database is correctly pre-populated to search for 'campus_id'.

Django 2.0.4 and python3.6

accounts / models.py

class UserManager(BaseUserManager):

def _create_user(self, email, matricula, password, is_staff, is_superuser, **extra_fields):
    now = timezone.now()
    if not matricula:
        raise ValueError(_('The given matricula must be set'))
    email = self.normalize_email(email)
    user = self.model(matricula=matricula, email=email, is_staff=is_staff, is_active=True, is_superuser=is_superuser, last_login=now, date_joined=now, **extra_fields)
    user.set_password(password)
    user.save(using=self._db)
    return user

def create_user(self, matricula, email=None, password=None, **extra_fields):
    return self._create_user(matricula, email, password, False, False, **extra_fields)

def create_superuser(self, matricula, email, password, **extra_fields):
    user=self._create_user(matricula, email, password, True, True, **extra_fields)
    user.is_active=True
    user.save(using=self._db)
    return user

class User(AbstractBaseUser, PermissionsMixin):

username = models.CharField(_('username'), max_length=15, unique=True,
    help_text=_('Required. 15 characters or fewer. Letters, numbers and @/./+/-/_ characters'),
    validators=[ validators.RegexValidator(re.compile('^[\w.@+-]+$'), _('Enter a valid username.'),
     _('invalid'))], blank=True, null=True)
name = models.CharField(_('Nome'), max_length=100, null=True, blank=True)
email = models.EmailField(_('email address'), max_length=100, unique=True)
is_staff = models.BooleanField(_('staff status'), default=False, help_text=_('Designates whether the user can log into this admin site.'))
is_active = models.BooleanField(_('active'), default=True, help_text=_('Designates whether this user should be treated as active. Unselect this instead of deleting accounts.'))
is_trusty = models.BooleanField(_('trusty'), default=False, help_text=_('Designates whether this user has confirmed his account.'))
date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
matricula = models.CharField(
    'Matricula', max_length=25, unique=True)
tipo = models.IntegerField(choices = ((1, 'Docente'),
                                (2, 'Discente'),
                                (3, 'Técnico Administrativo')), default=1)
campus = models.ForeignKey(Campus, on_delete=models.PROTECT)
cpf = models.CharField(max_length=30, unique=True, null=True, blank=True)

USERNAME_FIELD = 'matricula'
REQUIRED_FIELDS = ['name', 'email', 'tipo', 'cpf', 'campus']

objects = UserManager()

class Meta:
    verbose_name = _('user')
    verbose_name_plural = _('users')

def get_full_name(self):
    full_name = '%s %s' % (self.name, self.name)
    return full_name.strip()
def get_short_name(self):
    return self.name
def email_user(self, subject, message, from_email=None):
    send_mail(subject, message, from_email, [self.email])

settings.py

AUTH_USER_MODEL = 'contas.User'

Institutions / models.py

class Instituicao(models.Model):
nome = models.CharField(max_length=70, null=False, blank=False)
razao_social = models.CharField(max_length=100, null=False, blank=False)
cnpj = models.CharField(max_length=30, null=False, blank=False)
sigla = models.CharField(max_length=10, null=False, blank=False)
estado = models.ForeignKey(Estado, on_delete=models.PROTECT, blank=True)

def __str__(self):
    return self.sigla

class Meta:
    verbose_name = 'Instituição'
    verbose_name_plural = 'Instituições'


class Campus(models.Model):
nome = models.CharField(max_length=50, null=False)
sigla = models.CharField(max_length=10, null=False)
endereco = models.ForeignKey(Endereco, on_delete=models.PROTECT)
instituicao = models.ForeignKey(Instituicao, on_delete=models.PROTECT)
ddd_telefone = models.CharField(max_length=2, null=False)
telefone = models.CharField(max_length=9, null=False)

def __str__(self):
    return self.nome

class Meta:
    verbose_name = 'Campus'
    verbose_name_plural = 'Campi'
    
asked by anonymous 05.01.2019 / 01:20

0 answers