fix
This commit is contained in:
@@ -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)
|
||||
|
||||
17
submission/migrations/0010_remove_conversation_fk.py
Normal file
17
submission/migrations/0010_remove_conversation_fk.py
Normal 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',
|
||||
),
|
||||
]
|
||||
@@ -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,
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user