首页 > 解决方案 > 具有默认值的自定义 Django 用户

问题描述

我正在使用带有 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

视图.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)

标签: pythondjangodjango-rest-framework

解决方案


推荐阅读