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

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模型——两者对应不同的数据库表,自然不会同步显示。

解决步骤

  1. 在应用的admin.py中注册自定义User模型:
from django.contrib import admin
from .models import User

admin.site.register(User)
  1. (可选)如果需要更贴合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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:07:08