У меня есть пользовательская модель, как показано ниже
class User(AbstractBaseUser, PermissionsMixin):
class Type:
FP = 'fp'
BRANCH = 'branch'
CHOICES = (
(FP, '채용공고 보기'),
(BRANCH, '채용공고 내기'),
)
class Sex:
MALE = 'male'
FEMALE = 'female'
CHOICES = (
(MALE, '남성'),
(FEMALE, '여성')
)
type = models.CharField(
max_length=10,
verbose_name='계정 종류',
choices=Type.CHOICES,
)
email = models.EmailField(
verbose_name='이메일',
unique=True,
)
name = models.CharField(
max_length=10,
verbose_name='이름'
)
nickname = models.CharField(
max_length=10,
verbose_name='닉네임',
unique=True,
)
phone = models.CharField(
max_length=20,
verbose_name='전화번호',
)
sex = models.CharField(
max_length=10,
verbose_name='성별',
choices=Sex.CHOICES,
)
company_name = models.CharField(
verbose_name='회사이름',
max_length=256,
)
dob = models.DateTimeField(
verbose_name='생년월일'
)
profile_img = models.ImageField(
verbose_name='프로필 이미지',
upload_to=user_profile_img_file_path,
)
sns_id = models.TextField(
verbose_name='SNS ID'
)
sns_type = models.CharField(
verbose_name='SNS 종류',
max_length=20,
)
objects = UserManager()
USERNAME_FIELD = 'email'
и пользовательский менеджер, как показано ниже
class UserManager(BaseUserManager):
def create_user(self, email, password, **extra_fields):
sys.stderr.write(repr(extra_fields))
if not email:
raise ValueError('이메일은 필수사항입니다')
user = self.model(email=self.normalize_email(email), **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
user = self.create_user(email, password)
user.is_superuser = True
user.save(using=self._db)
return user
, и тест выглядит как ниже
def test_create_valid_user_success(self):
"""
Test that creating user with valid payload is successful
"""
profile_img = self.generate_photo_file()
payload = {
'email': 'test@gmail.com',
'password': '1234567',
'type': 'fp',
'name': 'testname',
'nickname': 'testnickname',
'phone': '01012341234',
'sex': 'male',
'company_name': 'company_name',
'dob': '1992-11-23T10:22:38+0000',
'profile_img': profile_img,
'sns_id': '1234567',
'sns_type': 'facebook',
}
res = self.client.post(CREATE_USER_URL, payload)
sys.stderr.write(repr(res))
self.assertEqual(res.status_code, status.HTTP_201_CREATED)
user = get_user_model().objects.get(**res.data)
self.assertTrue(user.check_password(payload['password']))
self.assertNotIn('password', res.data)
к сожалению, я продолжаю получать ошибку ниже, когда я запускаю вышеупомянутый тест
Direct assignment to the forward side of a many-to-many set is prohibited. Use groups.set() instead.
Я не большой эксперт по django; однако, насколько я знаю, то, что я делаю выше, довольно стандартно, и у меня нет никакой связи в пользовательской модели.
Даже более странное поведение заключается в том, что, если я непосредственно создаю пользователя с той же полезной нагрузкой, не используя APIClient, он работает без нареканий. Что не так с моим тестом?