Нулевое поле, возвращающее требование
Я установил поле referral в моей модели django на null, но каждый раз, когда я пытаюсь зарегистрироваться без передачи параметра, он говорит, что поле необходимо для регистрации. Я пробовал разные подходы, чтобы попытаться решить эту проблему, но так и не нашел решения. Я хочу, чтобы пользователи могли регистрироваться без использования реферального кода
#models.py
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.utils import timezone
class UserManager(BaseUserManager):
def _create_user(self, username, email, password, is_staff, is_superuser, address, **extra_fields):
now = timezone.now()
if not username:
raise ValueError(('The given username must be set'))
email = self.normalize_email(email)
user = self.model(username=username, email=email,
is_staff=is_staff, is_active=True,
is_superuser=is_superuser, last_login=now,
date_joined=now, address=address, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, username, email=None, password=None, **extra_fields):
return self._create_user(username, email, password, False, False, True,
**extra_fields)
def create_superuser(self, username, email, password, **extra_fields):
user = self._create_user(username, email, password, True, True,
**extra_fields)
user.is_active = True
user.save(using=self._db)
return user
class User(AbstractBaseUser, PermissionsMixin):
first_name = models.CharField(max_length=250, blank=True)
last_name = models.CharField(max_length=250, blank=True)
email = models.EmailField(('email address'), unique=True)
username = models.CharField(max_length=50, unique=True, blank=False, default='username')
profile_picture = models.ImageField(upload_to='Pictures', blank=True)
created_at = models.DateField(auto_now_add=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
referral_code = models.CharField(max_length=10, unique=True, blank=True, null=True)
referred_by = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True)
referred_users_count = models.IntegerField(default=0)
#subscription_start_dates = models.DateField(null=True, blank=True)
#subscription_end_dates = models.DateField(null=True, blank=True)
objects = UserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email',]
def get_full_name(self):
return self.email
def get_short_name(self):
return self.email
def __unicode__(self):
return self.email
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_staff(self):
return self.is_admin
всякий раз, когда я отправляю свои JSON-данные следующим образом:
{
"first_name": "string",
"last_name": "string",
"email": "userandr@example.com",
"username": "userandr",
"referral_code": " ",
"password1": "stringx200",
"password2": "stringx200"
}
возвращается
{
"referral_code": [
"This field may not be blank."
]
}.
Как это исправить?
Вы используете unique=True
, в этом случае он не может сохранить несколько нулевых значений. Удалите unique=True
и запустите миграцию снова.
Так что ошибка была вызвана полем реферального кода из сериализатора
referral_code = serializers.CharField(required=False, allow_blank=True)
Я изменил его на этот, и теперь он работает идеально