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

Django REST Framework创建任务时author_id非空约束错误如何解决?

错误原因

你遇到的非空约束报错,是因为Task模型的author外键字段为非空字段,但创建任务时没有给该字段赋值。DRF不会自动将当前登录用户关联到新建的资源上,需要手动完成配置。

解决方案

第一步:修改Task视图

重写get_queryset方法保证用户仅能查看自己创建的任务,重写perform_create方法自动为新建任务赋值当前登录用户为作者:

class TaskListCreateView(generics.ListCreateAPIView):
    permission_classes = [IsAuthenticated]
    serializer_class = TaskSerializer

    # 仅返回当前用户创建的任务
    def get_queryset(self):
        return Task.objects.filter(author=self.request.user)
    
    # 创建任务时自动注入当前登录用户为作者
    def perform_create(self, serializer):
        serializer.save(author=self.request.user)

第二步:修改Task序列化器

将author字段设为只读,避免要求前端传递该字段,同时可以在返回结果中展示作者信息:

class TaskSerializer(serializers.ModelSerializer):
    # 可选配置:如果需要返回作者邮箱而非id,可以添加该行
    # author_email = serializers.ReadOnlyField(source='author.email')
    class Meta:
        model = Task
        fields = ('id', 'task_name', 'comments', 'status', 'author') # 新增author字段
        read_only_fields = ['author'] # 标记为只读,无需前端传参

第三步:确认全局配置

检查settings.py中的DRF配置,确保已经启用JWT认证:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}

前端调用创建任务接口时,需要在请求头中携带认证信息:Authorization: Bearer <获取到的access_token>,保证DRF可以正确识别当前登录用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:06:01