This commit is contained in:
2026-03-31 02:21:44 -06:00
parent 986b48f1de
commit 9c76c98da8
9 changed files with 98 additions and 43 deletions

View File

@@ -36,28 +36,43 @@ def create_submission(request, payload: SubmissionIn):
创建一个新的提交
"""
task = get_object_or_404(Task, id=payload.task_id)
conversation = None
if payload.conversation_id:
from prompt.models import Conversation
conversation = get_object_or_404(
Conversation, id=payload.conversation_id, user=request.user
)
conversation.is_active = False
conversation.save(update_fields=["is_active"])
sub = Submission.objects.create(
if payload.prompt:
from prompt.models import Conversation, Message
from django.db.models import Count as _Count
conversation = (
Conversation.objects.filter(user=request.user, task=task)
.annotate(msg_count=_Count("messages"))
.order_by("-msg_count", "-created")
.first()
)
if not conversation:
conversation = Conversation.objects.create(
user=request.user, task=task, is_active=False
)
Message.objects.create(
conversation=conversation, role="user", content=payload.prompt, source="manual"
)
Message.objects.create(
conversation=conversation,
role="assistant",
content="",
code_html=payload.html,
code_css=payload.css,
code_js=payload.js,
source="manual",
)
from .classifier import classify_conversation_messages
threading.Thread(target=classify_conversation_messages, args=(conversation.id,), daemon=True).start()
Submission.objects.create(
user=request.user,
task=task,
html=payload.html,
css=payload.css,
js=payload.js,
conversation=conversation,
)
if conversation:
from .classifier import classify_conversation_messages
threading.Thread(target=classify_conversation_messages, args=(conversation.id,), daemon=True).start()
@router.get("/", response=List[SubmissionOut])
@paginate
@@ -69,7 +84,6 @@ def list_submissions(request, filters: SubmissionFilter = Query(...)):
submissions = (
Submission.objects.select_related("task", "user")
.defer("html", "css", "js")
.exclude(conversation__isnull=False, html__isnull=True, css__isnull=True, js__isnull=True)
)
if filters.task_id:
@@ -143,7 +157,6 @@ def list_by_user_task(request, user_id: int, task_id: int):
)
return (
Submission.objects.filter(user_id=user_id, task_id=task_id)
.exclude(conversation__isnull=False, html__isnull=True, css__isnull=True, js__isnull=True)
.select_related("task", "user")
.defer("html", "css", "js")
.annotate(my_score=user_rating_subquery)

View File

@@ -0,0 +1,17 @@
# Generated by Django 6.0.1 on 2026-03-31 06:52
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('submission', '0009_add_view_count'),
]
operations = [
migrations.RemoveField(
model_name='submission',
name='conversation',
),
]

View File

@@ -9,7 +9,6 @@ from django.dispatch import receiver # 导入receiver
from account.models import RoleChoices, User
from task.models import Task
from prompt.models import Conversation
class FlagChoices(models.TextChoices):
@@ -41,10 +40,6 @@ class Submission(TimeStampedModel):
html = models.TextField(null=True, blank=True, verbose_name="HTML代码")
css = models.TextField(null=True, blank=True, verbose_name="CSS代码")
js = models.TextField(null=True, blank=True, verbose_name="JS代码")
conversation = models.ForeignKey(
Conversation, on_delete=models.SET_NULL, null=True, blank=True,
related_name="submissions", verbose_name="对话"
)
flag = models.CharField(
max_length=10,
choices=FlagChoices.choices,

View File

@@ -8,7 +8,7 @@ class SubmissionIn(Schema):
html: Optional[str] = None
css: Optional[str] = None
js: Optional[str] = None
conversation_id: Optional[UUID] = None
prompt: Optional[str] = None
class SubmissionOut(Schema):
@@ -24,7 +24,6 @@ class SubmissionOut(Schema):
html: Optional[str] = None
css: Optional[str] = None
js: Optional[str] = None
conversation_id: Optional[UUID] = None
flag: Optional[str] = None
zone: Optional[str] = None
submit_count: int = 0
@@ -87,7 +86,6 @@ class SubmissionOut(Schema):
"html": submission.html,
"css": submission.css,
"js": submission.js,
"conversation_id": submission.conversation_id,
"flag": submission.flag,
"created": submission.created.isoformat(),
"modified": submission.modified.isoformat(),