我正在處理用戶注冊表。在這個表單中有一個 ImageField 欄位供用戶在那里上傳他的照片。關鍵是這個 ImageField 只存在于 forms.py 中,在模型中。py 照片保存在名為 photo 的 BinaryField 中。
在我的 views.py 中保存表單時,我將此影像轉換為 base64,將影像保存在照片欄位中并保存表單。
到目前為止一切順利,我可以保存表格。問題是編輯這個用戶表單,我如何上傳這張照片供用戶在模板中查看?
模型.py:
class User(models.Model):
photo = models.BinaryField(null=True, blank=True)
表格.py:
class UserForm(forms.ModelForm):
image = forms.ImageField(required=False, label='Photo')
視圖.py:
if form.is_valid():
if form.cleaned_data['image']:
user = form.save(commit=False)
user.photo = base64.encodestring(form.cleaned_data['image'].file.read())
user.save()
uj5u.com熱心網友回復:
如果您的問題是在提交表單之前顯示影像,則需要使用 javascript。
例子
$('your_file_input_field').change(function() {
src = URL.createObjectURL($(this).prop('files')[0]);
$('your_image_container').attr("src", src);
}
如果要顯示經過二進制編碼的影像(即,在將其保存到資料庫之后),請參閱此討論 ( https://stackoverflow.com/questions/55886078/ )。
一般來說,除非有特殊原因,否則將資料庫中的影像保存為二進制檔案并不是一個好主意。相反,只需使用檔案欄位來保存影像,然后該影像將參考服務器目錄結構中的相應檔案。
uj5u.com熱心網友回復:
嗯有趣的問題阿德里亞諾。您可以使用 的instance屬性訪問影像form。假設您有一個edit視圖函式,它接受pk并傳遞表單作為背景關系,就像這樣......
def edit(request, pk):
user = User.objects.filter(pk=pk).first()
if request.method == "POST":
pass
return HttpResponseRedirect(reverse("edit", args=[pk]))
form = UserForm(instance=user)
return render(request, "index.html", {"form": form})
正如我現在提到的,像這樣訪問模板中的 photo 屬性非常容易 {{ form.instance.photo }}
<div id="updateImageHere"></div>
<script>
const decodedImageString = "{{ form.instance.photo.decode }}";
var image = new Image();
image.src = `data:image/png;base64,${decodedImageString}`;
const updateImageHere = document.getElementById("updateImageHere")
updateImageHere.appendChild(image);
</script>
我已將解碼的照片分配給常量,然后使用 image.src 將其附加到 updateImagehere div 中。如果您有任何問題,請告訴我...
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/366397.html
