我已经在很长一段时间内一直在努力解决这个简单的问题。
我没有使用Python编程的经验,所以我为此道歉。我尽力尝试每一个解决方案,并查看这个网站寻求帮助..但收效甚微。
我正在尝试编写一个简单的类来帮助我上传用户提交的文件对。我希望它能做到这样的事情:
所以这就是我目前为一个文件做的事情(因为我正在做一对,这个过程可以再次重复)
我目前从POST请求中获取信息,以便在我的views.py中执行以下操作(其中newID是uniqueID,num是文件名的后缀):
newID = uuid4().hex
num = 1
upload = UploadFile()
upload.file = request.FILES['inputfile1'])
upload.save()
UploadFile类在我的models.py中是这样的:
class UploadFile(models.Model):
file = models.FileField(upload_to=path_and_rename('path/', str(uid) + "_" + str(num)))
(其中path_and_rename是分别设置文件路径和名称的函数)
您可能会注意到,我从未将newID和num传递给我的UploadFile类。这就是我遇到麻烦的地方。我对Python / Django不太熟悉,我花了一些时间试图刷新。我仍然无法弄明白。我知道这是一个非常简单的问题!
如上所述,我收到执行错误:名称'uid'未定义
我尝试使用__init__创建一个构造函数来初始化newID和num,但我仍然遇到类似的问题。我也尝试过设置字段,就像我使用“upload.file = ...”一样,但这也不起作用。我已经尝试将“文件”字段移动到函数和构造函数中。
我无法找到一个平衡点,我可以在课堂上保留“文件”,并且仍然可以访问“自我”或任何字段。
如何将这些整数传递给我的UploadFile类?
非常感谢你的时间和帮助。我希望我能够充分解释我的困境,我希望尽快解决这个问题!
答案 0 :(得分:0)
你应该使用Django表格。
# forms.py
from django import forms
from .models import UploadFile
class UploadFileForm(forms.ModelForm):
class Meta:
model = UploadFile
# models.py
from django.db import models
def path_to_rename(instance, fiename):
'''Compute path to filename'''
# define uid here
uid = getattr(instance, '_uid', None)
num = getattr(instance, '_num', None)
return os.path.join(uid, filename)
class UploadFile(models.Model):
# FileField accepts a callback that will be called when the instance is saved to get the new path
file = models.FileField(upload_to=path_to_rename)
def __init__(self, *args, **kwargs):
self._uid = None
sef._num = None
super(UploadFile, self).__init__(*args, **kwargs)
def save(self, uid=None, num=None, *args, **kwars):
self._uid = uid
self._num = num
super(UploadFile, self).save(*args, **kwargs)
# views.py
from django.shortcuts import render
from .forms import UploadFileForm
def my_view(request):
newID = uuid4().hex
num = 1
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
upload_file = form.save(commit=False)
upload_file.save(newID, num)
return redirect('where needed')
else:
form = UploadFileForm()
return render(request, 'template.html', {'form': form})
# template.html
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<form>
阅读: https://docs.djangoproject.com/en/1.6/ref/models/fields/#filefield https://docs.djangoproject.com/en/1.6/topics/forms/ https://docs.djangoproject.com/en/1.6/topics/forms/modelforms/