Django模型定义是否正确?分配任务保存后Allocation表无更新问题
问题核心原因
你当前使用的TaskAllocateForm绑定的是Task模型,调用form.save()只会更新Task表的对应记录,Django不会自动同步操作独立的Allocation表,这就是Allocation表没有生成对应数据的根本原因。你的模型结构本身没有逻辑错误,只需补充Task分配成员后同步生成Allocation记录的逻辑即可。
解决方案
提供两种常用实现方式,均满足你「仅为member字段为null的记录填充Allocation表」的需求:
方案1:修改视图,手动创建Allocation记录
无需额外配置,直接修改allocate_task视图代码即可:
def allocate_task(request, pk): task_details = Task.objects.get(id=pk) form = TaskAllocateForm(instance=task_details) if request.method == 'POST': form = TaskAllocateForm(request.POST, instance=task_details) if form.is_valid(): # 保存Task修改 task = form.save() # 仅当任务已分配成员且没有对应分配记录时创建 if task.member is not None and not Allocation.objects.filter(task=task).exists(): Allocation.objects.create( member=task.member, task=task ) return redirect('/')
方案2:使用Django信号自动同步
适合需要全局生效的场景,不管是后台修改还是其他视图修改Task的member字段,都会自动生成Allocation记录:
- 在你的app目录下新建
signals.py文件,写入如下代码:
from django.db.models.signals import post_save from django.dispatch import receiver from .models import Task, Allocation @receiver(post_save, sender=Task) def create_allocation_on_task_assign(sender, instance, **kwargs): # 仅当任务分配了成员且无对应分配记录时创建 if instance.member is not None and not Allocation.objects.filter(task=instance).exists(): Allocation.objects.create( member=instance.member, task=instance )
- 修改app的
apps.py文件,注册信号:
from django.apps import AppConfig # 此处替换为你的实际app名对应的Config类 class YourAppConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'your_app_name' # 替换为你的app名 def ready(self): import your_app_name.signals # 替换为你的app名
内容的提问来源于stack exchange,提问作者Monam Bharti
相关产品推荐
相关产品推荐

