django - 将 CSV 数据导入模型 - DJANGO
问题描述
我正在实施客户列表。我想为用户提供导入新客户的可能性,例如 csv 文件。客户端模型具有以下字段:客户端、姓名、姓氏、电子邮件、电话
所以我创建了这个模型:
class CsvClient(models.Model):
file_name = models.FileField(upload_to='csv-cliente')
uploaded = models.DateTimeField(auto_now_add=True)
activated = models.BooleanField(default=False)
def __str__(self):
return f"File id: {self.id}"
和views.py中的这个函数:
import csv
def importa_csv_clienti(request):
form = CVSForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
form = CVSForm()
clients = CsvClient.objects.get(activated=False)
with open(clienti.file_name.path, 'r') as f:
reader = csv.reader(f)
for i, row in enumerate(reader):
if i==0:
pass
else:
row = "".join(row)
row = row.replace(";", " ")
row = row.split(" ")
client = row[0].capitalize()
name = row[1].capitalize()
surname = row[2].capitalize()
value = Cliente.objects.create(
cliente=cliente,
nome=nome,
cognome=cognome,
email=riga[3],
telefono=riga[4],
)
print('oggetto creato:', value.cliente, value.nome, value.cognome, value.email, value.telefono)
clients.activated = True
clients.save()
context = {'form': form}
template = 'importa.html'
return render(request, template, context)
它可以工作,期待这样一个事实,如果在 csv 文件中我有行:
Nutella Antonio Dello Iudice
nutella 是客户 Antonio 是姓名 Dello Iodice 是姓氏,电子邮件和电话为空白
基本上,它将其解释为 Dello 是姓氏而 Iudice 是电子邮件。
如果姓氏由2个或多个单词组成,我如何告诉他不要分开姓氏?
PS:这是一个好奇心,但是我怎么知道用户导入的 csv 文件是否用 ; 分隔 并不是 , ?因为我设置为分隔符“;”,但是如果用户导入一个以“,”分隔的文件,我的代码将无法正常工作,对吗?
解决方案
现在你正在替换“;” 由一个空格。所以一行 likeNutella;Antonio Dello; Iudice
将被转换为Nutella Antonio Dello Iudice
.
在此替换之后,您对空格进行拆分。
为什么不删除row = row.replace(";", " ")
,只是做row = row.split(";")
?
推荐阅读
- azure - 从同一租户中的另一个订阅访问本地数据网关资源
- python - tensorflow:未创建 XLA 设备,未设置 tf_xla_enable_xla_devices
- excel - countifs公式中的vba标准语法
- flags - Catchpoint 中的 QUIC - 我们可以添加 Chromium 标志以在 catchpoint 中启用 QUIC 吗?
- python - 如何安装具有可选/额外要求的 python 轮文件?
- arrays - 如何在具有相似数据的数组中搜索?迅速
- r - 使用 R 中的行名根据另一个数据框中的行顺序对数据框中的行进行重新排序
- excel - 在excel中使用标准偏差函数来满足特定标准?
- excel - 按主题阅读电子邮件,在 Excel 中粘贴特定数据
- pyinstaller - 带有 pyinstaller 的 Debian 打包一个目录