fix delete
This commit is contained in:
@@ -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
|
||||||
|
|||||||
20
prompt/migrations/0006_message_submission_cascade_delete.py
Normal file
20
prompt/migrations/0006_message_submission_cascade_delete.py
Normal 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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -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()
|
|
||||||
|
|||||||
@@ -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()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
submission.delete() # CASCADE 自动删除关联的 asst_msg
|
||||||
|
|
||||||
if user_msg:
|
if user_msg:
|
||||||
user_msg.delete()
|
user_msg.delete()
|
||||||
asst_msg.delete()
|
|
||||||
|
|
||||||
submission.delete()
|
|
||||||
return {"message": "删除成功"}
|
return {"message": "删除成功"}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user