在Django中通过表单添加记录时创建带ID的桌面空目录求完整代码
Django 模型创建时同步生成桌面空目录解决方案
核心逻辑
在表单验证通过并保存数据库记录后,利用Python的os模块创建指定目录,这里采用跨平台兼容的桌面路径,同时处理目录已存在的情况避免报错。
完整代码文件
1. models.py(修正原文件多余代码)
from django.db import models class DosyaBilgileri(models.Model): sahisAdi = models.CharField(max_length=50, verbose_name='Şahıs Adı') def __str__(self): return self.sahisAdi
2. forms.py(新增ModelForm定义,新手易遗漏)
from django.forms import ModelForm from .models import DosyaBilgileri class DosyaBilgileriModelForm(ModelForm): class Meta: model = DosyaBilgileri fields = ['sahisAdi']
3. views.py(修改视图添加目录创建逻辑)
from django.shortcuts import render, redirect from django.contrib import messages import os from .forms import DosyaBilgileriModelForm def delilIndex(request): dosyaEkleFormu = DosyaBilgileriModelForm(request.POST or None) if dosyaEkleFormu.is_valid(): # 保存数据库记录 dosya_kaydi = dosyaEkleFormu.save() # 获取跨平台桌面路径 masaustu_yolu = os.path.expanduser("~/Desktop") # 用记录的sahisAdi作为目录名,替换空格避免路径问题 klasor_adi = dosya_kaydi.sahisAdi.replace(" ", "_") tam_klasor_yolu = os.path.join(masaustu_yolu, klasor_adi) # 创建目录,exist_ok=True允许目录已存在 os.makedirs(tam_klasor_yolu, exist_ok=True) messages.add_message(request, messages.INFO, 'Dosya ekleme ve klasör oluşturma işlemi tamamlandı.') return redirect('delilIndex') return render(request, 'delil/index.html', {'dosyaEkleFormu': dosyaEkleFormu })
4. 模板文件 templates/delil/index.html
<!DOCTYPE html> <html lang="tr"> <head> <meta charset="UTF-8"> <title>Dosya Ekle</title> </head> <body> <h2>Yeni Dosya Bilgisi Ekle</h2> {% if messages %} {% for msg in messages %} <p style="color: green;">{{ msg }}</p> {% endfor %} {% endif %} <form method="POST"> {% csrf_token %} {{ dosyaEkleFormu.as_p }} <button type="submit">Kaydet ve Klasör Oluştur</button> </form> </body> </html>
关键注意事项
- 确保项目
settings.py中已启用messages框架(默认配置已包含,无需额外修改) - 生产环境不建议直接操作服务器桌面,应改用项目专用存储目录(如
MEDIA_ROOT下的子目录) - 若需处理更复杂的特殊字符(如土耳其语特殊字符),可对
klasor_adi做进一步转义处理
内容的提问来源于stack exchange,提问作者upizney
相关产品推荐
相关产品推荐

