Я сделал систему в Django с реализацией импорта CSV. Однако, когда первый столбец данных содержит датские специальные символы Æ, Ø и Å или пробелы, он вставляет только первую строку данных.
Я прочитал, что модуль csv в Python, который я использую, не поддерживает ввод Unicode. Я предоставил код ниже для функции, которая соединяет файл CSV с моделью базы данных в Django.
Примечание: База данных создана в Mysql
views.py
def opret_hold(request):
prompt = {
"hold": "Rækkefølgen på inholdet af din .csv fil skal være: ma, fornavn, efternavn, hold, deling"
}
if request.method == 'GET':
return render(request, 'evalsys/admin/upload/opret_hold.html', prompt)
try:
csv_file = request.FILES['file']
if not csv_file.name.endswith('.csv'):
messages.warning(request, 'Dette er ikke en .csv fil.')
data_set = csv_file.read().decode("utf-8")
io_string = io.StringIO(data_set)
for row in csv.reader(io_string, delimiter=','):
for column in csv.reader(io_string, delimiter=','):
__, created = Hold.objects.get_or_create(
holdnavn=column[0],
slug=column[0],
)
created = Medarbejder.objects.get_or_create(
delingnavn_id=column[1],
slug=column[2],
ma=column[2],
fornavn=column[3],
efternavn=column[4],
holdnavn_id=Hold.objects.get(pk=(column[0])),
)
if request.method == 'POST' and HttpResponse.status_code == 200:
messages.success(request, "Hold oprettet.")
finally:
context = {}
return render(request, 'evalsys/admin/upload/opret_hold.html', context)
opret_hold.html
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file" required>
<p>Dette system acceptere kun .csv filer.</p>
<button type="submit" class="btn" id="generel-btn">Upload</button>
<br>
</form>