Django Admin与RESTful API端点用户数据不同步问题求助
Django Admin创建的用户无法在
/users/端点显示,反之亦然的问题排查 我在Django Admin界面创建的用户无法在/users/端点显示,反过来通过API创建的用户也不在Admin里显示。已经确认User模型已经正确保存并迁移到数据库,想问这是Django Admin和REST API的同步问题,还是序列化导致的?
更新#2
模型代码
class User(models.Model): username = models.CharField(max_length=150, unique=True) email = models.EmailField(unique=True) def __str__(self): return self.username
用户视图代码
@api_view(['GET', 'POST']) def user_list_create_view(request): if request.method == 'GET': users = User.objects.all() print("Users:", users) # 调试打印 serializer = UserSerializer(users, many=True) print("Serialized Data:", serializer.data) # 调试打印 return JsonResponse(serializer.data, safe=False) elif request.method == 'POST': serializer = UserSerializer(data=request.data) if serializer.is_valid(): serializer.save() return JsonResponse(serializer.data, status=201) return JsonResponse(serializer.errors, status=400) @api_view(['GET', 'PUT', 'DELETE']) def user_retrieve_update_delete_view(request, pk): user = get_object_or_404(User, pk=pk) if request.method == 'GET': serializer = UserSerializer(user) return JsonResponse(serializer.data) elif request.method == 'PUT': serializer = UserSerializer(user, data=request.data) if serializer.is_valid(): serializer.save() return JsonResponse(serializer.data) return JsonResponse(serializer.errors, status=400) elif request.method == 'DELETE': user.delete() return JsonResponse({'message': 'User deleted successfully.'}, status=204)
序列化器代码
class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ['id', 'username', 'email']
问题原因及解决办法
核心原因:自定义User模型未注册到Django Admin
你创建了自定义的User模型,但没在应用的admin.py文件中注册它,导致Django Admin默认管理的是Django自带的auth.User模型,而你的API操作的是自定义的User模型——两者对应不同的数据库表,自然不会同步显示。
解决步骤
- 在应用的
admin.py中注册自定义User模型:
from django.contrib import admin from .models import User admin.site.register(User)
- (可选)如果需要更贴合Django默认的用户管理体验,可自定义Admin类:
from django.contrib import admin from .models import User class CustomUserAdmin(admin.ModelAdmin): list_display = ('username', 'email', 'id') # 列表页显示的字段 search_fields = ('username', 'email') # 支持搜索的字段 admin.site.register(User, CustomUserAdmin)
验证方法
- 重启Django服务后,在Admin创建用户,访问
/users/端点即可看到该用户; - 通过API创建用户,刷新Admin页面也能看到新增的用户。
额外排查点
如果注册后仍有问题,检查:
- 数据库表:确认自定义
User模型对应的表(如your_app_user)数据是否正确,Admin操作的是否为该表; - 导入正确性:视图和序列化器中是否确实导入了自定义的
User模型,而非django.contrib.auth.models.User; - 查询逻辑:
User.objects.all()是否正确查询到自定义模型的所有数据。
内容的提问来源于stack exchange,提问作者Prince Zuko
相关产品推荐
相关产品推荐

