【发布时间】:2021-07-11 04:37:46
【问题描述】:
您好 StackOverFlow 朋友们, 我已经为我的项目创建了一个自定义用户模型,并希望使用 Restframework 注册用户。
我希望自定义用户模型有 2 个唯一字段,为此我遵循“Official doc”作为 unique_together 属性。它似乎只将 1 个字段(即我的案例的电子邮件)作为唯一字段。
到目前为止,我的相关代码如下所示: PS:如果需要更多信息,请告诉我。
models.py
class MasterUser(AbstractBaseUser):
email = models.EmailField(verbose_name='email address',max_length=255,unique=True,)
firstname = models.CharField(max_length=100,blank=True)
contact = models.CharField(max_length=100, blank=True)
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['firstname']
class Meta:
unique_together = (('email', 'contact'),)
serializer.py
class RegisterUserSerializer(serializers.ModelSerializer):
password2 = serializers.CharField(style={'input_type': 'password'}, write_only= True)
class Meta:
model = MasterUser
fields = ('firstname', 'password', 'password2', 'email','contact')
extra_kwargs = {
'password': {'write_only': True},
}
def save(self):
account = MasterUser(
email = self.validated_data['email'],
firstname = self.validated_data['firstname'],
contact = self.validated_data['contact'],
)
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
@api_view(['POST'])
def registration_view(request):
if request.method == "POST":
serializer = RegisterUserSerializer(data= request.data)
data = {}
if serializer.is_valid():
account = serializer.save()
data['response'] = "Successfully registered new user!"
else:
data = serializer.errors
return Response(data)
我在哪里缺少实现的东西?
【问题讨论】:
标签: python-3.x django django-rest-framework