将CSV数据导入模型-DJANGO

时间:2020-10-28 13:33:37

标签: django csv django-models import python-import

我正在实现客户列表。我想给用户导入一个以csv文件为基础的新客户端的可能性。 客户模型具有以下字段:客户,姓名,姓氏,电子邮件,电话

所以我创建了这个模型:

  <svg>
      <g transform={`translate(${width/2},${width/2}) rotate(-33.75)`}>
        {trackIds.map((trackId, i) => {
          const isCurrentTrack = trackId == this.props.focusedTrackId
          return (
            <g key={trackId} transform={`rotate(${i * 360 / trackIds.length})`}>
              {arcMilestones.map((milestone) => {
                const isCurrentMilestone = isCurrentTrack && milestone == currentMilestoneId
                const isMet = this.props.milestoneByTrack[trackId] >= milestone 
                return (
                  <path
                      key={milestone}
                      className={'track-milestone ' + (isMet ? 'is-met ' : ' ') + (isCurrentMilestone ? 
                        'track-milestone-current' : '')}
                      onClick={() => this.props.handleTrackMilestoneChangeFn(trackId, milestone)}
                      d={this.arcFn(milestone)}
                      style={{fill: isMet ? categoryColorScale(tracks[trackId].category) : undefined}} />
                )
              })}
               <circle
                  r="8"
                  cx="0"
                  cy="-50"
                  //style={{fill: categoryColorScale(tracks[trackId].category)}}
                  className={"track-milestone " + (isCurrentTrack && !currentMilestoneId ? "track-milestone-current" : "")}
                  onClick={() => this.props.handleTrackMilestoneChangeFn(trackId, 0)} />

            </g>
        )})}
      </g>
    </svg>

以及views.py中的此功能:

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}"

它可以工作,请期待这样的事实:如果在csv文件中我有以下行:

Nutella Antonio Dello Iudice

其中 nutella是客户 安东尼奥是名字 Dello Iodice是姓 电子邮件和电话为空

基本上,它将其解释为 姓Dello是电子邮件,Iudice是电子邮件。

如果姓氏由2个或更多的单词组成,我怎么告诉他不要分开?

PS:这是一种好奇心,但是我如何知道用户导入的csv文件是否被分隔;并不是 , ?因为我将其设置为分隔符“;”,但是如果用户导入一个以“”分隔的文件,则我的代码将无法工作,对吗?

2 个答案:

答案 0 :(得分:0)

现在您要替换“;”用空格。因此,像Nutella;Antonio Dello; Iudice这样的行将转换为Nutella Antonio Dello Iudice

此替换后,您将拆分空格。

为什么不删除row = row.replace(";", " ")而只做row = row.split(";")

答案 1 :(得分:0)

如果我对您的问题理解正确,那么您想检查使用了什么分隔符吗?

一种简单的方法是检查文件中的; -并且如果它们的数量大于或等于4(0; 1; 2; 3; 4),则分隔符为;。

第一个有关拆分您姓氏的问题:

row = "".join(row)
row = row.replace(";", " ")
row = row.split(" ")

为什么替换?有空格?只需用分隔符分隔行,因为在有效CSV中,不允许在内容内部使用分隔符。

row = "".join(row)
row = row.split(";")

现在,包含空格时不会拆分您的姓氏。