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

Django中创建Moc实例时自动生成含10个预填充项的CheckList

Django模型自动生成初始检查项及增删控制方案

一、修改CheckList模型,自动生成10个预填充检查项

把当前CheckList.save()仅创建单个CheckListItem的逻辑,改成循环生成10个预定义内容的检查项。先准备好初始动作项列表,再在CheckList创建时批量生成:

# 预定义10个初始检查项内容,可按需修改
INITIAL_CHECK_ITEMS = [
    "完成需求文档评审",
    "确认测试环境搭建完成",
    "编写核心功能单元测试",
    "完成接口联调",
    "进行性能测试",
    "准备用户手册初稿",
    "部署到预生产环境",
    "组织内部验收",
    "确认上线时间窗口",
    "发送上线通知"
]

class CheckList(models.Model):
    moc = models.OneToOneField(Moc, related_name='checklist', on_delete=models.CASCADE)
    name = models.CharField(max_length=128, blank=True, null=True)

    def __str__(self):
        return str(self.id)

    def save(self, *args, **kwargs):
        created = not self.pk
        super().save(*args, **kwargs)
        if created:
            # 循环生成10个预填充检查项
            for item_text in INITIAL_CHECK_ITEMS:
                CheckListItem.objects.create(
                    checklist=self,
                    action_item=item_text,
                    # 注意:原模型中actionee_name的default='1'是字符串,建议改为整数1或指定存在的用户对象
                    # 若允许该字段为空,可删除default并在模型中设置blank=True, null=True
                    actionee_name=User.objects.get(pk=1)
                )

二、实现CheckListItem的增删控制

1. 编写视图(views.py)

添加用于展示、添加、删除检查项的类视图:

from django.views.generic import ListView, CreateView, DeleteView
from django.urls import reverse_lazy
from .models import CheckList, CheckListItem

# 展示指定CheckList下的所有检查项
class CheckListItemListView(ListView):
    model = CheckListItem
    template_name = 'checklist_item_list.html'
    context_object_name = 'items'

    def get_queryset(self):
        checklist_id = self.kwargs.get('checklist_id')
        return CheckListItem.objects.filter(checklist_id=checklist_id)

# 添加新检查项
class CheckListItemCreateView(CreateView):
    model = CheckListItem
    fields = ['action_item', 'actionee_name', 'action_due']
    template_name = 'checklist_item_form.html'

    def form_valid(self, form):
        checklist_id = self.kwargs.get('checklist_id')
        form.instance.checklist = CheckList.objects.get(pk=checklist_id)
        return super().form_valid(form)

    def get_success_url(self):
        return reverse_lazy('checklist_item_list', kwargs={'checklist_id': self.kwargs.get('checklist_id')})

# 删除检查项
class CheckListItemDeleteView(DeleteView):
    model = CheckListItem
    template_name = 'checklist_item_confirm_delete.html'

    def get_success_url(self):
        return reverse_lazy('checklist_item_list', kwargs={'checklist_id': self.object.checklist.id})

2. 配置URL(urls.py)

添加对应路由规则:

from django.urls import path
from .views import CheckListItemListView, CheckListItemCreateView, CheckListItemDeleteView

urlpatterns = [
    # 其他已有URL...
    path('checklist/<int:checklist_id>/items/', CheckListItemListView.as_view(), name='checklist_item_list'),
    path('checklist/<int:checklist_id>/items/add/', CheckListItemCreateView.as_view(), name='checklist_item_add'),
    path('checklist/item/<int:pk>/delete/', CheckListItemDeleteView.as_view(), name='checklist_item_delete'),
]

3. 编写模板示例

检查项列表模板(checklist_item_list.html)

<h2>检查项列表</h2>
<a href="{% url 'checklist_item_add' checklist_id=view.kwargs.checklist_id %}">添加新检查项</a>
<ul>
{% for item in items %}
    <li>
        {{ item.action_item }} - 负责人: {{ item.actionee_name.username }} - 截止日期: {{ item.action_due|default:"未设置" }}
        <a href="{% url 'checklist_item_delete' pk=item.id %}">删除</a>
    </li>
{% empty %}
    <li>暂无检查项</li>
{% endfor %}
</ul>

添加检查项模板(checklist_item_form.html)

<h2>添加新检查项</h2>
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">保存</button>
</form>
<a href="{% url 'checklist_item_list' checklist_id=view.kwargs.checklist_id %}">返回列表</a>

删除确认模板(checklist_item_confirm_delete.html)

<h2>确认删除检查项?</h2>
<p>你确定要删除 "{{ object.action_item }}" 吗?</p>
<form method="post">
    {% csrf_token %}
    <button type="submit">确认删除</button>
    <a href="{% url 'checklist_item_list' checklist_id=object.checklist.id %}">取消</a>
</form>

三、补充说明

  • 若要从Moc详情页跳转到对应检查项列表,可在Moc模板中添加链接:{% url 'checklist_item_list' checklist_id=moc.checklist.id %}
  • 预填充的初始项可放到配置文件中,方便后续修改维护
  • 如需支持检查项编辑,可添加UpdateView视图,逻辑参考CreateView

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:45:35