I have an application that used for student assessment, so i have some attributes like 'absensi', 'tugas', 'uts' and 'uas' in app_nilai and the other used foreignkey that connected with their object it includes 'mahasiswa', 'kelas' and 'matakuliah' in app_matkul. That object has each variable to explain. When i put import file in html it doesn't work but in admin it's really work. Would you check my program and where's the problem ?Noted : No error or failure messages appeared, making me confused about where the problem was
Forms.py in app_nilai
class NilaiForm(ModelForm):def __init__(self, *args, **kwargs): super(NilaiForm, self).__init__(*args, **kwargs) self.fields['mahasiswa'].widget.attrs['readonly'] = True self.fields['mahasiswa'].widget.attrs['class'] = 'form-control-plaintext'class Meta: model = Nilai fields = ('mahasiswa', 'absensi', 'tugas', 'uts', 'uas') widgets = {'mahasiswa': forms.TextInput(attrs={'readonly': 'readonly', 'class': 'form-control-plaintext'}),'absensi': forms.TextInput(attrs={'class': 'form-control'}),'tugas': forms.TextInput(attrs={'class': 'form-control'}),'uts': forms.TextInput(attrs={'class': 'form-control'}),'uas': forms.TextInput(attrs={'class': 'form-control'}) }class UploadCSVForm(forms.Form): csv_file = forms.FileField()
views.py in app_nilai
def import_csv(request, kelas_id): kelas = get_object_or_404(Kelas, id=kelas_id) if request.method == 'POST': form = UploadCSVForm(request.POST, request.FILES) if form.is_valid(): csv_file = request.FILES['csv_file'] dataset = Dataset() imported_data = dataset.load(csv_file.read().decode('utf-8'), format='csv') nilai_resource = NilaiResource() result = nilai_resource.import_data(imported_data, dry_run=True, use_transactions=True, raise_errors=True, kelas_id=kelas_id) if not result.has_errors(): import_result = nilai_resource.import_data(imported_data, dry_run=False, use_transactions=True, raise_errors=True, kelas_id=kelas_id, update=True) messages.success(request, 'Data berhasil diimpor.') else: messages.error(request, 'Terjadi kesalahan saat mengimpor data.') else: messages.error(request, 'Form tidak valid.') return redirect('nilai_kelas', kelas_id=kelas_id) form = UploadCSVForm() return render(request, 'import_csv.html', {'form': form, 'kelas': kelas})
resource.py in app_nilai
class NilaiResource(resources.ModelResource): data_id = fields.Field( column_name='id', attribute='pk' ) mahasiswa = fields.Field( column_name='mahasiswa', attribute='mahasiswa', widget=ForeignKeyWidget(Mahasiswa, 'id') ) matakuliah = fields.Field( column_name='matakuliah', # Ganti nama kolom ini untuk menghindari konflik attribute='mata_kuliah', widget=ForeignKeyWidget(MataKuliah, 'id') ) kelas = fields.Field( column_name='kelas', attribute='kelas', widget=ForeignKeyWidget(Kelas, 'id') ) class Meta: model = Nilai fields = ('data_id', 'mahasiswa', 'matakuliah', 'kelas', 'absensi', 'tugas', 'uts', 'uas') import_id_fields = ('data_id',) def before_import_row(self, row, **kwargs): kelas_id = kwargs.get('kelas_id') row['kelas'] = kelas_id
model in app_nilai
from tkinter import CASCADEfrom django.core.validators import MaxValueValidatorfrom django.db import modelsfrom django.contrib.auth.models import Userfrom app_matkul.models import Kelas, Mahasiswa, MataKuliahclass Nilai(models.Model): mahasiswa = models.ForeignKey(Mahasiswa, on_delete=models.SET_NULL, blank=True, null=True) mata_kuliah = models.ForeignKey(MataKuliah, on_delete=models.SET_NULL,blank=True,null=True) kelas = models.ForeignKey(Kelas, on_delete=models.SET_NULL,blank=True,null=True) absensi = models.IntegerField(default=0, validators=[MaxValueValidator(100)]) tugas = models.IntegerField(default=0, validators=[MaxValueValidator(100)]) uts = models.IntegerField(default=0, validators=[MaxValueValidator(100)]) uas = models.IntegerField(default=0, validators=[MaxValueValidator(100)]) updated_at = models.DateTimeField(auto_now=True) @property def perhitungan_nilai(self): nilai_absen = self.absensi * (15/100) nilai_tugas = self.tugas * (35/100) nilai_uts = self.uts * (20/100) nilai_uas = self.uas * (30/100) olah = nilai_absen + nilai_tugas + nilai_uts + nilai_uas if olah >=60 and olah <=70 : return 70 else : return int (olah) def logika_nilai(self): if self.perhitungan_nilai >=80: return 'A' elif self.perhitungan_nilai >=75: return 'AB' elif self.perhitungan_nilai >=70: return 'B' elif self.perhitungan_nilai >=50: return 'D' else : return 'E' @classmethod def rata_rata_nilai(cls, kelas_id): nilai_mahasiswa = cls.objects.filter(kelas__id=kelas_id) total_nilai = sum(a.perhitungan_nilai for a in nilai_mahasiswa) count = nilai_mahasiswa.count() return total_nilai / count if count > 0 else 0 def __str__(self): return str(self.mahasiswa.nama) class Meta : ordering = ['mahasiswa'] verbose_name_plural = '1. Nilai Akhir'
HTML
<form method="POST" enctype="multipart/form-data" action="{% url 'import_csv' kelas.id %}"> {% csrf_token %}<div class="mb-3"><label for="csv_file" class="form-label">Import File CSV</label><input type="file" class="form-control" id="csv_file" name="csv_file" accept=".csv" required></div><button type="submit" class="btn btn-sm btn-outline-primary">Import CSV</button><a href="{% url 'export_csv' kelas.id %}" class="btn btn-sm btn-outline-info">Unduh Template CSV</a></form>
import and export with django working