我有接收用戶上傳文件的django服務器,然後將元數據存儲在本地以供進一步檢索,但將文件發送到另一個服務器。所以我不希望該文件存儲在本地。這是我最初的模型:如何在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']
我用instance.save(「老闆」,「FILE_ID」),我得到了錯誤:「無法與沒有主鍵強制保存()更新」所以我改變我的模型如下:
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_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})
那麼,我該如何才能保存元數據並將文件發佈出去呢?
實際修復錯誤不是更好嗎?無論如何,擁有一個「TextField」並不是一個好主意的外鍵,特別是當那個'TextField'的名字表明它更像'IntegerField'時更有意義 – Sayse
您是否已經遷移了您在模型中所做的更改? – masnun
@Sayse我在視圖中用uuid4填充textfield;我將把它改爲UUIDField,看看它是如何工作的。 – Miind