You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django REST Framework无法将用户保存到AWS RDS PostgreSQL,无报错

Django连接AWS RDS PostgreSQL时用户创建失败但ID递增的问题

我有一个连接到AWS RDS PostgreSQL数据库的Django项目,创建普通用户时数据无法保存到数据库,但通过python manage.py createsuperuser命令能成功创建超级用户,且能在PGAdmin中正常查看。奇怪的是,尽管数据库里没有生成用户条目,但用户ID仍在持续递增。切换到SQLite数据库时功能正常,推测是AWS RDS PostgreSQL相关问题。


Settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': env("POSTGRES_NAME"), 
        'USER': env("POSTGRES_USER"),
        'PASSWORD': env("POSTGRES_PASSWORD"),
        'HOST': env("POSTGRES_HOST"), 
        'PORT': env("POSTGRES_PORT"),
    }
}
DATABASES["default"]["ATOMIC_REQUESTS"] = True

models.py

class UserManager(BaseUserManager):
  def _create_user(self, email, password,first_name,last_name,is_staff, is_superuser, **extra_fields):
    if not email:
        raise ValueError('Users must have an email address')
    now = timezone.now()
    email = self.normalize_email(email)
    user = self.model(
        email=email,
        is_staff=is_staff, 
        is_active=True,
        is_superuser=is_superuser, 
        last_login=now,
        date_joined=now, 
        first_name = first_name,
        last_name = last_name,
        **extra_fields
    )
    user.set_password(password)
    user.save(using=self._db)
    return user

  def create_user(self, email, password, first_name, last_name, **extra_fields):
    user = self._create_user(email, password, first_name, last_name, False, False, **extra_fields)
    user.save(using=self._db)
    return user
    # return self._create_user(email, password, first_name, last_name, False, False, **extra_fields)

  def create_superuser(self, email, password, **extra_fields):
    user=self._create_user(email, password, None, None, True, True, **extra_fields)
    user.save(using=self._db)
    return user


# Custom user model
class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=254, unique=True)
    name = models.CharField(max_length=254, null=True, blank=True)
    first_name = models.CharField(max_length=254, null=True, blank=True)
    last_name = models.CharField(max_length=254, null=True, blank=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    last_login = models.DateTimeField(null=True, blank=True)
    date_joined = models.DateTimeField(auto_now_add=True)

serializer.py

class UserSerializer(ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'
        extra_kwargs = {
            'password': {'write_only': True},
            'id': {'read_only': True}
        }

    # called when we create a user
    def create(self, validated_data):
        password = validated_data.pop('password', None)
        # user itself
        instance = self.Meta.model(**validated_data)
        if password is not None:
            instance.set_password(password)

        instance.save()
        return instance

views.py

class RegisterAPIView(APIView):
    def post(self, request):
        data = request.data
        print("here data")
        print(data)
        if data['password'] != data['password_confirm']:
            raise exceptions.APIException('Passwords do not match!')
        serializer = UserSerializer(data=data)
        serializer.is_valid(raise_exception=True)
        user_id = serializer.save()
        # serializer.save()
        print('errors:', serializer.errors)
        return Response(serializer.data,status=status.HTTP_200_OK)

接口请求示例

{
    "first_name": "firstName",
    "last_name": "lastName",
    "email": "user7@user.com",
    "password": "password123",
    "password_confirm": "password123"
}

接口响应示例

{
    "id": 15,
    "first_name": "firstName",
    "last_name": "lastName",
    "email": "user7@user.com",
}

终端输出

here data
{'first_name': 'firstName', 'last_name': 'lastName', 'email': 'user7@user.com', 'password': 'password123', 'password_confirm': 'password123'}
errors: {}

内容的提问来源于stack exchange,提问作者justin107d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:39:56