首页 > 解决方案 > /assignment/get/ 中的 ValueError 字段“zip”需要一个数字,但得到了“zip”

问题描述

在将数据从csv文件存储到数据库时出现错误:

ValueError at /assignment/get/
  Field 'zip' expected a number but got 'zip'

模型.py

from django.db import model

class csvData(models.Model):
   zip=models.IntegerField()
   lat=models.IntegerField()
   lng=models.IntegerField()

视图.py

import csv
from .models import csvData

def get(request):
    fname="uszips.csv"
    with open(fname) as csvfile:
       csv_reader=csv.reader(csvfile, delimiter=',')
       for row in csv_reader:
           csvdata=csvData()
           csvdata.zip=row[0]
           csvdata.lat=row[1]
           csvdata.lng=row[2]

标签: django

解决方案


第一行可能是标题,所以列的名称。尝试跳过第一行。

此外,您需要将值转换为整数,因为它们都将是字符串。

也许是这样的:

def get(request):
    ...
    with open(fname) as csvfile:
       csv_reader = csv.reader(csvfile, delimiter=',')

       for i, row in enumerate(csv_reader):
           if i == 0:
               # skip first row
               continue

           csvdata = csvData()
           csvdata.zip = int(row[0])
           csvdata.lat = int(row[1])
           csvdata.lng = int(row[2])
   ...

推荐阅读