Skip to main content

Form upload file

Untuk memungkinkan pengguna mengunggah file, Anda harus menambahkan form pengunggahan file ke template dan menambahkan view yang memproses pengunggahan file tersebut.

Berikut adalah langkah-langkah umum yang perlu dilakukan:

  1. Tambahkan atribut enctype="multipart/form-data" pada form di template untuk mengaktifkan pengunggahan file.
<form method="post" enctype="multipart/form-data">
<!-- form fields here -->
</form>
  1. Tambahkan field FileField pada model yang akan menampung file yang diunggah.
class MyModel(models.Model):
# other fields
my_file = models.FileField(upload_to='my_directory/')
  1. Tambahkan view yang memproses pengunggahan file dan menyimpannya ke dalam model. Pastikan untuk memvalidasi file yang diunggah dan menampilkan pesan kesalahan jika ada.
from django.shortcuts import render, redirect
from django.contrib import messages
from myapp.forms import MyModelForm

def my_view(request):
if request.method == 'POST':
form = MyModelForm(request.POST, request.FILES)
if form.is_valid():
instance = form.save(commit=False)
instance.user = request.user
instance.save()
messages.success(request, 'File uploaded successfully.')
return redirect('my_view')
else:
messages.error(request, 'Error uploading file.')
else:
form = MyModelForm()
return render(request, 'my_template.html', {'form': form})
  1. Tampilkan file yang diunggah di template.
{% for obj in object_list %}
<a href="{{ obj.my_file.url }}">{{ obj.my_file.name }}</a>
{% endfor %}

<form method="post" enctype="multipart/form-data">
{% csrf_token %} {{ form.as_p }}
<button type="submit">Submit</button>
</form>

Pastikan untuk mengatur MEDIA_ROOT dan MEDIA_URL dengan benar di settings.py Anda sehingga file dapat diunggah dan diakses.

django dapat menggunakan model FileField atau ImageField. FileField memungkinkan pengguna untuk mengunggah file apa pun, sedangkan ImageField hanya memungkinkan pengguna mengunggah file gambar.

Berikut adalah contoh penggunaan FileField pada sebuah model:

class Document(models.Model):
title = models.CharField(max_length=255)
file = models.FileField(upload_to='documents/')
created_at = models.DateTimeField(auto_now_add=True)

Contoh di atas akan membuat model Document dengan tiga kolom, yaitu title, file, dan created_at. upload_to adalah parameter opsional yang menentukan direktori di mana file akan disimpan di media root. File yang diunggah akan ditempatkan di direktori media_root/documents/.

Anda juga dapat menggunakan ImageField untuk mengunggah file gambar, seperti ini:

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='avatars/')
bio = models.TextField()

Contoh di atas akan membuat model Profile dengan kolom user, avatar, dan bio. upload_to adalah parameter opsional yang menentukan direktori di mana file gambar akan disimpan di media root. File gambar yang diunggah akan ditempatkan di direktori media_root/avatars/.

Dalam keduanya, untuk menampilkan file atau gambar pada halaman Django, Anda dapat menggunakan tag {% static %} dan {% url %} seperti pada contoh berikut:

{% load static %}
<img src="{% url 'document-view' document.id %}" alt="{{ document.title }}">

Contoh di atas menggunakan tag {% url %} untuk menentukan URL untuk menampilkan file, dan tag {% static %} untuk menentukan URL untuk file yang berada pada direktori static.