from django.db import models class UploadedDocument(models.Model): """ 保存用户上传文档的元数据和入库状态。 设计上只记录“文件属于哪个场景、当前是否已入库、失败原因是什么”, 不把 RAG 细节耦合进模型层。 """ # 文档状态用于驱动前端提示和后续可操作项。 STATUS_UPLOADED = "uploaded" STATUS_INDEXED = "indexed" STATUS_FAILED = "failed" scenario_id = models.CharField(max_length=100, db_index=True) original_name = models.CharField(max_length=255) file = models.FileField(upload_to="documents/%Y%m%d/") file_type = models.CharField(max_length=20) size = models.PositiveIntegerField(default=0) status = models.CharField(max_length=20, default=STATUS_UPLOADED, db_index=True) error_message = models.TextField(blank=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: ordering = ["-created_at"] def __str__(self) -> str: return self.original_name def get_status_display_text(self) -> str: """为模板提供更适合演示的中文状态文案。""" return { self.STATUS_UPLOADED: "已上传,待入库", self.STATUS_INDEXED: "已入库,可检索", self.STATUS_FAILED: "入库失败", }.get(self.status, self.status)