这是我的模型.py
class User(AbstractBaseUser, PermissionsMixin, BaseModel):
STUDENT = '1'
INSTRUCTOR = '2'
ADMIN = '3'
ROLE_CHOICES = (
(STUDENT, 'student'),
(INSTRUCTOR, 'instructor'),
(ADMIN, 'admin')
)
id = models.UUIDField(primary_key = True, default = uuid.uuid4, editable = False)
email = models.EmailField(('email address'),max_length=255)
username = models.CharField(max_length=255, unique=True ,null=True, blank=True)
phone_no = encrypt(models.CharField(('phone number'), max_length=15))
role= models.CharField(max_length=20,choices=ROLE_CHOICES, blank=True, null=True)
institute = models.ForeignKey(Institute, on_delete=models.SET_NULL, null=True, related_name='institute')
is_active = encrypt(models.BooleanField(default=True))
is_staff = encrypt(models.BooleanField(default=False))
is_superuser = encrypt(models.BooleanField(default=False))
objects = UserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email', 'phone_no']
class Institute(BaseModel):
id = models.UUIDField(primary_key = True, default = uuid.uuid4, editable = False)
name = encrypt(models.CharField(max_length=255))
company_website = models.CharField(max_length=255, blank=True)
brand_name = models.CharField(max_length=255, blank=True)
registered_address = models.CharField(max_length=255, blank=True)
company_pan = models.CharField(max_length=255, blank=True)
company_tan = models.CharField(max_length=255, blank=True)
company_gstin = models.CharField(max_length=255, blank=True)
def institute_id(self):
return self.id.__str__()
这是我的serializer.py:
class AdminRegisterSerializer(ModelSerializer):
email = serializers.EmailField(required=True)
password = serializers.CharField(write_only=True, style={'input_type': 'password'}, required=True)
institute_name = serializers.CharField(source='User.institute')
class Meta:
model = User
fields = ['email', 'username', 'password', 'institute_name']
我的观点.py:
class AdminRegisterAPIView(CreateAPIView):
"""Here, this API will create a new admin user as previosly while creating/adding user
the password was not getting hashed so and was not working in log in as well so in order
to overcome this issue this API was created, `once the user is created main admin/superuser
can grant and add other permission to the created admin-user as well`"""
serializer_class = AdminRegisterSerializer
# permission_classes = [IsAdminUser]
def post(self, request, *args, **kwargs):
data = request.data
email, username= data['email'], data['username']
password, institute = data['password'], data['institute']
user_obj = User.objects.filter(username=username).first()
if not user_obj:
user = User.objects.create(username=username, email=email, institute = institute)
user.set_password(password)
user.save()
return Response(data = {'success' : 'Admin-User registered successfully.'}, status=status.HTTP_200_OK)
else:
return Response({"error": "A user with this role already exists."}, status=status.HTTP_400_BAD_REQUEST)
这是我到目前为止所做的,但出现错误,我还需要在 views.py 中的 post 方法中发送研究所名称,但研究所是外键是用户模型。
请帮我解决这个问题。提前致谢
直到现在我已经尝试对 serializer.py 进行更改:
institute_name = serializers.CharField(source='User.institute')
class Meta:
model = User
fields = ['email', 'username', 'password', 'institute_name']