我有一个django服务器,它接收用户上传的文件,然后将元数据存储在本地以便进一步检索,但将文件发送到另一个服务器。所以我不想把文件存储在本地。这是我的初始模型:
class MainFile(models.Model):
owner = models.ForeignKey(User)
docfile = models.FileField(verbose_name= 'Enter you file', null=True)
file_id = models.TextField(max_length=38, null=True)
def __str__(self):
return MainFile.file_id
class MainFileForm(forms.ModelForm):
class Meta:
model = MainFile
fields = ['docfile']
我曾经实例.保存('owner','file\u id'),我得到了一个错误:“Cannot force a update in save(),without primary key”,所以我将我的模型改为:
class MainFile(models.Model):
owner = models.ForeignKey(User)
docfile = models.FileField(verbose_name= 'Enter you file', null=True)
file_id = models.TextField(max_length=38, primary_key=True, default=1)
在修改了我的模型之后,我得到了一个错误:“以下字段在此模型中不存在或者是m2m字段:file\u id”
我的观点是:
@login_required
def StoreSegments(request):
if request.method == 'POST':
form = MainFileForm(request.POST, request.FILES)
if form.is_valid():
file_id = uuid.uuid4()
instance = form.save(commit=False)
instance.owner = request.user
instance.file_id = file_id
instance.save(update_fields=['file_id', 'owner'])
f = request.FILES['docfile']
urls = 'http://192.168.43.6:8000/StoreSegments'
r=requests.post(urls, files= {'segment': f}, data={'segmentID':file_id})
form.save()
context = {'form': form, 'message': r.status_code}
return render(request, "StoreSegments.html", context)
form = MainFileForm()
return render(request, 'StoreSegments.html', context={'message': 'request.method =="get" detected',
'form': form})
那么,我怎么能只保存元数据并将文件发布出去呢?你知道吗
您不需要强制主键,只需要附加user对象。由于不希望将文件保存在本地,因此不需要将其作为模型的一部分。你知道吗
但您确实希望用户上载该文件,因此您确实需要将其作为表单的一部分。你知道吗
第一步是从模型中删除文件字段,并将文件上载字段添加到表单。你知道吗
我还建议您添加一些关于您的第三方处理的文件状态的元信息,但您可以稍后添加此信息作为增强功能。你知道吗
使用原始模型,您只需要一个带一个字段的标准表单:
以下是更新视图的方法:
您应该总是在成功的POST请求之后重定向(有关详细信息,请参见this article on wikipedia)。你知道吗
查看messages framework以在您的感谢页面上显示结果消息。你知道吗
相关问题 更多 >
编程相关推荐