fix delete

This commit is contained in:
2026-04-16 01:32:42 -06:00
parent 6ca5e4b6ea
commit 99f680814e
4 changed files with 37 additions and 20 deletions

View File

@@ -109,7 +109,7 @@ def delete_message_pair(request, message_id: int):
""" """
asst_msg = get_object_or_404(Message, id=message_id, role="assistant") asst_msg = get_object_or_404(Message, id=message_id, role="assistant")
if asst_msg.conversation.user != request.user: if asst_msg.conversation.user != request.user and request.user.role != RoleChoices.SUPER:
raise HttpError(403, "只能删除自己的消息") raise HttpError(403, "只能删除自己的消息")
# Find the preceding user message # Find the preceding user message

View File

@@ -0,0 +1,20 @@
# Generated by Django 6.0.1 on 2026-04-16 06:15
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('prompt', '0005_message_add_submission_fk'),
('submission', '0010_remove_conversation_fk'),
]
operations = [
migrations.AlterField(
model_name='message',
name='submission',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='source_message', to='submission.submission'),
),
]

View File

@@ -1,7 +1,5 @@
import uuid import uuid
from django.db import models from django.db import models
from django.db.models.signals import pre_delete
from django.dispatch import receiver
from django_extensions.db.models import TimeStampedModel from django_extensions.db.models import TimeStampedModel
from account.models import User from account.models import User
from task.models import Task from task.models import Task
@@ -38,7 +36,7 @@ class Message(models.Model):
"submission.Submission", "submission.Submission",
null=True, null=True,
blank=True, blank=True,
on_delete=models.SET_NULL, on_delete=models.CASCADE,
related_name="source_message", related_name="source_message",
) )
@@ -47,10 +45,3 @@ class Message(models.Model):
def __str__(self): def __str__(self):
return f"[{self.role}] {self.content[:50]}" return f"[{self.role}] {self.content[:50]}"
@receiver(pre_delete, sender=Message)
def delete_linked_submission(sender, instance, **kwargs):
if instance.submission_id:
from submission.models import Submission
Submission.objects.filter(id=instance.submission_id).delete()

View File

@@ -39,6 +39,7 @@ def create_submission(request, payload: SubmissionIn):
""" """
task = get_object_or_404(Task, id=payload.task_id) task = get_object_or_404(Task, id=payload.task_id)
manual_asst_msg = None
if payload.prompt: if payload.prompt:
conversation = ( conversation = (
Conversation.objects.filter(user=request.user, task=task) Conversation.objects.filter(user=request.user, task=task)
@@ -53,7 +54,7 @@ def create_submission(request, payload: SubmissionIn):
Message.objects.create( Message.objects.create(
conversation=conversation, role="user", content=payload.prompt, source="manual" conversation=conversation, role="user", content=payload.prompt, source="manual"
) )
Message.objects.create( manual_asst_msg = Message.objects.create(
conversation=conversation, conversation=conversation,
role="assistant", role="assistant",
content="", content="",
@@ -83,8 +84,11 @@ def create_submission(request, payload: SubmissionIn):
js=payload.js, js=payload.js,
) )
# Link assistant message if provided # Link assistant message to submission
if payload.message_id: if manual_asst_msg:
manual_asst_msg.submission = submission
manual_asst_msg.save(update_fields=["submission"])
elif payload.message_id:
try: try:
msg = Message.objects.get( msg = Message.objects.get(
id=payload.message_id, id=payload.message_id,
@@ -207,11 +211,12 @@ def clear_all_flags(request):
@login_required @login_required
def delete_submission(request, submission_id: UUID): def delete_submission(request, submission_id: UUID):
submission = get_object_or_404(Submission, id=submission_id) submission = get_object_or_404(Submission, id=submission_id)
if submission.user != request.user: if submission.user != request.user and request.user.role != RoleChoices.SUPER:
raise HttpError(403, "只能删除自己的提交") raise HttpError(403, "只能删除自己的提交")
# Delete linked message pair if present # 找到关联的助手消息,再找前一条用户消息
asst_msg = Message.objects.filter(submission=submission).first() asst_msg = Message.objects.filter(submission=submission).first()
user_msg = None
if asst_msg: if asst_msg:
user_msg = ( user_msg = (
Message.objects.filter( Message.objects.filter(
@@ -222,11 +227,12 @@ def delete_submission(request, submission_id: UUID):
.order_by("-created") .order_by("-created")
.first() .first()
) )
if user_msg:
user_msg.delete()
asst_msg.delete()
submission.delete() submission.delete() # CASCADE 自动删除关联的 asst_msg
if user_msg:
user_msg.delete()
return {"message": "删除成功"} return {"message": "删除成功"}