本人土木狗,初学代码,请求解答
我用Django编写后端,使用了simpleUI,目前已实现如下图

现在我想实现将各个项目的图纸上传到对应项目文件夹下,该如何实现

本人土木狗,初学代码,请求解答
我用Django编写后端,使用了simpleUI,目前已实现如下图


晚上好🌙🌙🌙
本答案参考通义千问
你目前使用的是 Django 框架,并结合了 simpleUI 进行界面展示,现在想要实现“多级目录”功能,特别是将图纸上传到对应项目文件夹下。这是一个典型的文件存储与目录管理问题。
你希望:
Project 和 File 模型,用于表示项目和文件。from django.db import models
import os
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
class Project(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
def __str__(self):
return self.name
class File(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='files')
file = models.FileField(upload_to='projects/')
uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.file.name} - {self.project.name}"
注意:
upload_to='projects/'表示所有文件都存放在media/projects/目录下,但我们需要根据project.id动态调整路径。
def get_upload_path(instance, filename):
return f"projects/{instance.project.id}/{filename}"
# 修改 File 模型
class File(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='files')
file = models.FileField(upload_to=get_upload_path) # 使用自定义路径
uploaded_at = models.DateTimeField(auto_now_add=True)
重点:
get_upload_path函数会根据当前project.id动态生成路径,如:projects/1/file.pdf。
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, get_object_or_404
from .models import Project, File
from .forms import FileUploadForm
def upload_file(request, project_id):
project = get_object_or_404(Project, id=project_id)
if request.method == 'POST':
form = FileUploadForm(request.POST, request.FILES)
if form.is_valid():
new_file = form.save(commit=False)
new_file.project = project
new_file.save()
return HttpResponseRedirect(f'/project/{project_id}/')
else:
form = FileUploadForm()
return render(request, 'upload.html', {'form': form, 'project': project})
def view_files(request, project_id):
project = get_object_or_404(Project, id=project_id)
files = project.files.all()
return render(request, 'files.html', {'project': project, 'files': files})
from django import forms
from .models import File
class FileUploadForm(forms.ModelForm):
class Meta:
model = File
fields = ['file']
from django.urls import path
from . import views
urlpatterns = [
path('project/<int:project_id>/upload/', views.upload_file, name='upload_file'),
path('project/<int:project_id>/', views.view_files, name='view_files'),
]
如果你使用的是 django-simpleui,可以在 admin 中注册 Model 并配置界面。
from django.contrib import admin
from .models import Project, File
admin.site.register(Project)
admin.site.register(File)
在 settings.py 中启用 simpleUI:
INSTALLED_APPS = [
...
'simpleui',
...
]
<h2>上传文件到 {{ project.name }}</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">上传</button>
</form>
<h2>{{ project.name }} 的文件</h2>
<ul>
{% for file in files %}
<li><a href="{{ file.file.url }}">{{ file.file.name }}</a></li>
{% endfor %}
</ul>
.pdf, .dwg 等)。pdf.js)。| 文件 | 修改内容 |
|------|----------|
| models.py | 添加 get_upload_path 方法,动态生成文件路径 |
| views.py | 实现上传和文件列表视图 |
| forms.py | 创建文件上传表单 |
| urls.py | 添加上传和文件列表路由 |
| templates/ | 创建上传和文件展示页面 |
media/projects/1/)如果你还需要具体文件类型限制、文件预览、权限系统等功能,也可以继续提问,我可以提供更详细的实现方式。