Невозможно создать суперпользователя, так как внешний ключ не может быть null
Как присвоить значение внешнего ключа при создании суперпользователя в Django?
Я хочу создать нового суперпользователя с помощью команды python manage.py createsuperuser, но получаю ошибку: ValueError: Cannot assign "<QuerySet [<Company: Company object (1)>]>": "Worker.company" должен быть экземпляром "Company".
Вот код:
class CompanyAccountType(models.Model):
accountTypeName = models.CharField(max_length=50)
accountTypeValue = models.IntegerField()
class Company(models.Model):
city = models.ForeignKey(City, on_delete=models.RESTRICT)
category = models.ForeignKey(Category, on_delete=models.RESTRICT)
companyAccountType = models.ForeignKey(CompanyAccountType, on_delete=models.RESTRICT)
class MyAccounManager(BaseUserManager):
def create_user(self, username, password):
user = self.model(
username=username,
)
#I tried this for testing (real I would like to send id throught request), but I get error
#ValueError: Cannot assign "<QuerySet [<Company: Company object (1)>]>": "Worker.company" must be a "Company" instance.
companyObj = Company.objects.filter(id=1)
user.company = companyObj
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, username, password):
user = self.create_user(username=username,
password = password,
)
#user.company.id = 1
user.save(using=self._db)
return user
class Worker(AbstractBaseUser):
username = models.CharField(max_length=30, unique=True, default="user")
password = models.CharField(max_length=300, default="password")
company = models.ForeignKey(Company, on_delete=models.RESTRICT) #blank=True
workerName = models.CharField(max_length=50)
workerProfileImage = models.ImageField(upload_to='images/', default = "images/defaultUser.png", null = True)
USERNAME_FIELD = 'username'
#REQUIRED_FIELDS = ['company']
objects = MyAccounManager()
def __str__(self):
return self.username
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)