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

Django任务管理器项目问题:创建/编辑任务时仅显示自身添加的分类

解决Django任务管理器中分类仅显示当前用户创建项的问题

1. 确认分类模型与用户关联

首先确保Category模型已通过外键绑定到用户,让每个分类归属到特定用户:

# tasks/models.py
from django.contrib.auth.models import User
from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=100)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='categories')

    def __str__(self):
        return self.name

2. 重写表单初始化方法过滤分类

在任务表单的__init__方法中接收当前用户,过滤分类选项仅显示该用户创建的内容:

# tasks/forms.py
from django import forms
from .models import Task, Category

class TaskForm(forms.ModelForm):
    class Meta:
        model = Task
        fields = ['title', 'description', 'category', 'due_date', 'status']

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user')
        super().__init__(*args, **kwargs)
        self.fields['category'].queryset = Category.objects.filter(user=user)

3. 在视图中传递当前用户到表单

创建和编辑任务的视图里,初始化表单时传入当前登录用户,同时确保用户只能操作自己的任务:

# tasks/views.py
from django.shortcuts import render, redirect
from .forms import TaskForm
from .models import Task

def task_create(request):
    if request.method == 'POST':
        form = TaskForm(request.POST, user=request.user)
        if form.is_valid():
            task = form.save(commit=False)
            task.user = request.user  # 若Task模型关联用户,需设置归属
            task.save()
            return redirect('task_list')
    else:
        form = TaskForm(user=request.user)
    return render(request, 'tasks/task_form.html', {'form': form})

def task_edit(request, pk):
    task = Task.objects.get(pk=pk)
    if task.user != request.user:
        return redirect('task_list')
    if request.method == 'POST':
        form = TaskForm(request.POST, instance=task, user=request.user)
        if form.is_valid():
            form.save()
            return redirect('task_list')
    else:
        form = TaskForm(instance=task, user=request.user)
    return render(request, 'tasks/task_form.html', {'form': form})

补充建议

  • 若Task模型尚未关联用户,建议添加user外键字段,实现任务的用户隔离,避免越权访问。
  • 模板无需额外修改,表单会自动渲染过滤后的分类选项。

内容的提问来源于stack exchange,提问作者Joao Paulo Genari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:43:31