我在 View 中有一个函数,用于上传 CSV 数据并写入数据库。那部分正在工作。但是,当我尝试检查是否有数据更新或创建时,我收到一条错误消息:
"local variable 'created' referenced before assignment".
View 中的函数如下
def bookings_upload(request):
prompt = {
'order': "Please import a valid CSV file"
}
if request.method == "GET":
return render(request, 'booking_app/importBookings.html', prompt)
csv_file = request.FILES['bookings']
if not csv_file.name.endswith('.csv'):
messages.error(request, "This file is not a .csv file.")
return redirect('/booking_app/bookings_upload/')
data_set = csv_file.read().decode('utf-8')
io_string = io.StringIO(data_set)
next(io_string)
for column in csv.reader(io_string, delimiter=',', quotechar="|"):
_, created = Bookings.objects.update_or_create(
book_date=column[0],
grower_number=column[1],
bales_booked=column[3],
sale_date=column[6],
book_id=column[11],
reoffer=column[12]
)
)
if created:
messages.success(request, "Bookings have been imported successfully")
else:
messages.warning(request, "No new bookings were imported. Please check/verify your csv file")
context = {}
return render(request, 'booking_app/importBookings.html', context)
我错过了什么?任何帮助将不胜感激。
请您参考如下方法:
@lmiguelvargasf 的回答解释了正在发生的事情,但我认为更好的重构是:
n_created = 0
for column in csv.reader(io_string, delimiter=",", quotechar="|"):
_, created = Bookings.objects.update_or_create(
book_date=column[0],
grower_number=column[1],
bales_booked=column[3],
sale_date=column[6],
book_id=column[11],
reoffer=column[12],
)
if created:
n_created += 1
if n_created:
messages.success(request, "%d bookings have been imported successfully" % n_created)
else:
messages.warning(request, "No new bookings were imported. Please check/verify your csv file")
