Как правильно написать представление для сохранения файла?
Моя модель выглядит следующим образом:
class Document(models.Model):
id: int = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) # type: ignore
order_id: str = models.CharField(max_length=255) # type: ignore
publicated_at: datetime = models.DateTimeField(null=True) # type: ignore
expired_at: datetime = models.DateTimeField(null=True) # type: ignore
created_at: datetime = models.DateTimeField(auto_now_add=True) # type: ignore
updated_at: datetime = models.DateTimeField(auto_now=True) # type: ignore
department: Department = models.ForeignKey(Department, on_delete=models.DO_NOTHING, null=True, blank=True) # type: ignore
file_name: str = models.CharField(max_length=255) # type: ignore
owner: CustomUser = models.ForeignKey(CustomUser, on_delete=models.DO_NOTHING, null=True, related_name='owned_documents') # type: ignore
loaded_by: CustomUser = models.ForeignKey(CustomUser, on_delete=models.DO_NOTHING, null=True, blank=True, related_name='loaded_documents') # type: ignore
file_id: str = models.CharField(max_length=255, null=True, blank=False) # type: ignore
metrics: Metric = models.ManyToManyField(Metric, through="DocumentsMetrics", related_name="documents") # type: ignore
document_status: DocumentStatus = models.ForeignKey(DocumentStatus, on_delete=models.SET_NULL, null=True) # type: ignore
issue: str = models.TextField(null=True, blank=True) # type: ignore
suggestion: str = models.TextField(null=True, blank=True) # type: ignore
class Meta:
app_label = 'library'
mongo_file_key = 'file_id'
def upsert_document(self, buffer: IStream) -> None:
file_ms.update_from_bytes(self, self.mongo_file_key, buffer)
def get_document_bytes(self) -> IStream | None:
return file_ms.get_bytes(self, self.mongo_file_key)
def save_document(self, path: str) -> None:
with open(path, 'wb') as f:
Я храню объект "Документ" в PostgreSQL. В поле file_id я вставляю id из mongoDB. В моей модели есть метод
upsert_document
для сохранения файла в mongo, который возвращает mongo_id.
env:
- django версия 3.9
- python версия 3.10
- drf версия 3.13
Как написать представление и сериализатор для проверки и обработки запроса?