【发布时间】:2021-02-10 21:14:30
【问题描述】:
我正在实施一个客户列表。我想为用户提供导入新客户的可能性,例如 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 是客户 安东尼奥是名字 Dello Iodice 是姓氏 并且电子邮件和电话都是空白的
基本上它将它解释为 Dello 是姓氏,Iudice 是电子邮件。
如果姓氏由2个或多个单词组成,我如何告诉他不要分开?
PS:这是一个好奇,但我怎么知道用户导入的 csv 文件是否由 ; 分隔并不是 , ?因为我设置为分隔符“;”,但是如果用户导入一个用“,”分隔的文件,我的代码就不行了,对吧?
【问题讨论】:
标签: django csv django-models import python-import