Импортировать CSV-файл ДжангоPython

Программы на Python
Anonymous
Импортировать CSV-файл Джанго

Сообщение Anonymous »

У меня есть приложение, которое используется для оценки учащихся, поэтому у меня есть некоторые атрибуты, такие как «absensi», «tugas», «uts» и «uas», в app_nilai, а другой используемый внешний ключ, связанный с их объектом, включает в себя «mahasiswa». ', 'келас' и 'матакулия' в app_matkul. У этого объекта есть каждая переменная, которую нужно объяснить. Когда я помещаю файл импорта в html, он не работает, но в администраторе он действительно работает. Не могли бы вы проверить мою программу и определить, в чем проблема?
Замечено: никаких сообщений об ошибках или сбоях не появилось, поэтому я не понимаю, в чем проблема.
views.py в 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 в 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
модель в app_nilai

Код: Выделить всё

from tkinter import CASCADE
from django.core.validators import MaxValueValidator
from django.db import models
from django.contrib.auth.models import User
from app_matkul.models import Kelas, Mahasiswa, MataKuliah

class 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 =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

Код: Выделить всё

        
{% csrf_token %}

Import File CSV


Import CSV
[url={% url ]Unduh Template CSV[/url]

импорт и экспорт с помощью django

Подробнее здесь: https://stackoverflow.com/questions/785 ... csv-django

Вернуться в «Python»