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

Django REST场景下实现用户关联项目、新增项目自动分配创建人方案问询

Django REST 框架用户-项目关联功能实现方案

1. 模型层关联配置

用户和项目属于多对多关联关系,你可以选择用Django自动生成关联表,或者自定义独立的关联表存储配对信息:

方案1:自动生成关联表(无额外字段需求时推荐)

from django.db import models
from django.contrib.auth.models import User

class Project(models.Model):
    name = models.CharField(max_length=128, verbose_name="项目名")
    # 其他项目字段如描述、创建时间等自行添加
    users = models.ManyToManyField(User, related_name="related_projects", verbose_name="关联用户")

related_name用于反向查询,后续可直接通过user.related_projects拿到单个用户关联的所有项目。

方案2:自定义关联表(需要存储额外配对信息时使用)

from django.db import models
from django.contrib.auth.models import User

# 独立的用户-项目关联表
class UserProjectRel(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="关联用户")
    project = models.ForeignKey("Project", on_delete=models.CASCADE, verbose_name="关联项目")
    # 可自行添加关联角色、绑定时间等额外字段

class Project(models.Model):
    name = models.CharField(max_length=128, verbose_name="项目名")
    # 其他项目字段
    users = models.ManyToManyField(User, through=UserProjectRel, related_name="related_projects", verbose_name="关联用户")

2. 手动创建关联的实现方式

如果需要从用户、项目列表中选中对象手动绑定关联,可按以下方式操作:

  • 使用自动生成关联表时:
# 取出目标用户和项目对象
target_user = User.objects.get(id=用户ID)
target_project = Project.objects.get(id=项目ID)

# 建立关联
target_project.users.add(target_user)
# 批量绑定多个用户
target_project.users.add(user1, user2, user3)
# 反向绑定也可:target_user.related_projects.add(target_project)

# 解除关联用remove,清空关联用clear
target_project.users.remove(target_user)
  • 使用自定义关联表时:
# 直接创建关联表条目即可
UserProjectRel.objects.create(user=target_user, project=target_project)

3. 新建项目自动绑定创建者的实现

在DRF的视图层重写创建逻辑即可,默认取当前请求的登录用户和新建项目绑定:

from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
from .models import Project
from .serializers import ProjectSerializer

class ProjectViewSet(viewsets.ModelViewSet):
    queryset = Project.objects.all()
    serializer_class = ProjectSerializer
    permission_classes = [IsAuthenticated] # 必须加登录校验,确保能拿到当前用户

    def perform_create(self, serializer):
        # 先保存新建的项目对象
        new_project = serializer.save()
        # 自动绑定当前登录用户
        new_project.users.add(self.request.user)

如果使用自定义关联表,把绑定逻辑替换为创建关联条目即可:

def perform_create(self, serializer):
    new_project = serializer.save()
    UserProjectRel.objects.create(user=self.request.user, project=new_project)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:09:02