我正在使用带有 Restframework 的 Django 3.2。 我为我的项目创建了一个自定义用户模型,并在模型中为某些字段提供了默认值。
但是在发出 POST 请求时不接受默认值。例如,“date_joined”留空,那么它必须是今天的日期,但是在向邮递员提出请求时,将其作为必填字段。 定义自定义用户时是否缺少任何内容?
模型.py
class MasterUser(AbstractBaseUser):
email = models.EmailField(verbose_name='email address',max_length=255,unique=True,)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
firstname = models.CharField(max_length=100,blank=True)
lastname = models.CharField(max_length=100,blank=True)
is_member = models.BooleanField(default=False)
date_joined = models.DateField(default=datetime.now)
contact = models.CharField(max_length=100, blank=True, unique=True)
membership_id = models.CharField(max_length=100, blank=True)
objects = MyUserManager()
序列化器
class RegisterUserSerializer(serializers.ModelSerializer):
...
...
def save(self):
timestamp = int(datetime.now(tz=timezone.utc).timestamp()*1000)
account = MasterUser(
email = self.validated_data['email'],
firstname = self.validated_data['firstname'],
lastname = self.validated_data['lastname'],
is_member = self.validated_data['is_member'],
date_joined = self.validated_data['date_joined'],
membership_id = hashString(str(timestamp))
)
password = self.validated_data['password']
password2 = self.validated_data['password2']
if password != password2:
raise serializers.ValidationError({'password': 'Password doesnt matches'})
account.set_password(password)
account.save()
return account
views.py
def registration_view(request):
if request.method == "POST":
is_member = request.POST.get('is_member')
timestamp = int(datetime.now(tz=timezone.utc).timestamp()*1000)
serializer = RegisterUserSerializer(data= request.data)
data = {}
if serializer.is_valid():
account = serializer.save()
data['response'] = "Successfully registered new user!"
data['email'] = account.email
data['firstname'] = account.firstname
else:
data = serializer.errors
return Response(data)