Quantcast
Channel: Recent Questions - Stack Overflow
Viewing all articles
Browse latest Browse all 12111

Import CSV Django

$
0
0

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


Viewing all articles
Browse latest Browse all 12111

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>