Я пытаюсь обновить поле или несколько полей из моей БД путем повторной загрузки CSV-файла с измененным значением.
Я пробовал это:
views.py
def file_upload(request):
if request.method == "POST":
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
id = 0
das2 = CSV3.objects.all().values_list()
csv_file = request.FILES['file']
with open(str(csv_file)) as file:
reader = csv.reader(file)
for row in reader:
id += 1
try:
_, p = CSV3.objects.get_or_create(id = id, defaults = {'gebaeudebereich' : row[0],
'gebaeudenummer' : row[1], 'ebene' : row[2],
'raum' : row[3], 'dose' : row[4], 'switch_ip' : row[5],
'switch_port' : row[6], 'datum' : row[7], 'akteur' : row[8]})
except IntegrityError:
for i in das2:
i[1] = row[0]
i.save()
return redirect('appp:index')
form = UploadFileForm()
return render(
request, "appp/file_upload.html", {"form": form}
)
Я перебрал значения и установил значение gebaeudebereich в значение gebaeudebereich в CSV-файле (я бы сделал это и с другими полями, но эту идею я попробовал).Это ничего не спасает и не дает ошибки, просто ничего не делает.Предложение try работает просто отлично.
my models.py
class CSV3(models.Model):
gebaeudebereich = models.CharField(max_length=100)
gebaeudenummer = models.CharField(max_length=100)
ebene = models.CharField(max_length=100)
raum = models.CharField(max_length=100)
dose = models.CharField(max_length=100)
switch_ip = models.CharField(max_length=100)
switch_port = models.CharField(max_length=100)
datum = models.CharField(max_length=100)
akteur = models.CharField(max_length=100)
class Meta:
unique_together = (("gebaeudebereich", "gebaeudenummer", "ebene", "raum", "dose"), ("switch_ip", "switch_port"))
Обновление базы данных с помощью загрузки файла не может быть таким сложным.Я надеюсь, что вы поможете мне, потому что я пытаюсь понять это слишком долго.