Я хотел бы обновить мою Django SQLite3 DB, повторно загрузив измененный CSV-файл.
Вот мой models.py
class CSV_File8(models.Model):
gebäudebereich = models.CharField(max_length=100)
gebäudenr = 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 = (("gebäudebereich", "gebäudenr", "ebene", "raum", "dose"), ("switch_ip", "switch_port", "datum", "akteur"))
мой views.py
class UploadFileForm(forms.Form):
file = forms.FileField()
def import_csv(request):
if request.method == "POST":
with open('C:/Users/admin/Desktop/djangoexcel/b.csv') as file:
reader = csv.reader(file)
id = 0
for row in reader:
id += 1
# _, p = CSV_File8.objects.get_or_create(id = id,
# gebäudebereich=row[0], gebäudenr=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]
# )
ds1 = CSV_File8.objects.filter(id = id,
gebäudebereich=row[0], gebäudenr=row[1], ebene=row[2], raum=row[3], dose=row[4]
).values().exists()
ds2 = CSV_File8.objects.filter(id = id,
switch_ip=row[5], switch_port=row[6], datum=row[7], akteur=row[8]
).values().exists()
if ds1 and id == id:
pass
if ds2 and id == id:
pass
if ds1 == False and id == id:
_, ds1 = CSV_File8.objects.values().update(id = id,
gebäudebereich=row[0], gebäudenr=row[1], ebene=row[2], raum=row[3], dose=row[4]
)
if ds2 == False and id == id:
_, ds2 = CSV_File8.objects.values().update(id = id,
switch_ip=row[5], switch_port=row[6], datum=row[7], akteur=row[8]
)
if ds1 and ds2 == False and id != id:
_, ds2 = CSV_File8.objects.values().update(id=id,
switch_ip=row[5], switch_port=row[6], datum=row[7], akteur=row[8]
)
return redirect('documents:index')
# wert = CSV_File3.objects.values_list('dose')
# for i in wert:
# if wert[i] == wert[i + 1]:
# #return render(request, 'documents/replace_entry.html', {'p' : p})
# return replace_entry(request, p)
form = UploadFileForm()
return render(
request, "documents/csv_upload.html", {"form": form}
)
Я получаю сообщение об ошибке UNIQUE constraint failed: documents_csv_file8.id
.В этом случае я изменил строку 3 моего CSV-файла, и ds1 является False, что правильно.Теперь он должен просто обновить значение и сохранить его в базе данных.Однако это дает мне ошибку.Я знаю, что это потому, что в этой конкретной строке уже есть уникальное значение, но я подумал, что код выше обрабатывает этот сценарий, просто обновляя значение.Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.Любая помощь будет оценена.