2015-01-08 3 views
0

я эту модель,Джанго: Проверка CSV

class user2(models.Model): 
    user = models.ForeignKey(User) 
    number = models.IntegerField(null=True) 

и CSV-файл, содержащий информацию, как это:

number,0001,0002,0003, ... 

Таким образом, мне нужно, чтобы проверить, является ли число, я беру из CSV-существует, если нет, то я создать пользователя с моделью пользователя Джанго, а затем создать пользователя user2, сейчас им пытаются это, чтобы проверить, если номер существует в БД

def import_csv(path): 
    path = "/home/ad/ds/Web.csv" 
    with open(path) as f: 
     reader = csv.reader(f) 
     for row in reader: 
      try: 
       if not user2.objects.filter(number=int(row[0])).exists(): 
        print "no" 
      except: 
       print "asd " 

, но когда я делаю это я получаю эту ошибку:

invalid literal for int() with base 10: 'number' 

, как я могу это сделать? благодаря

+0

да, число является ИНТ @summea – Hook

+0

'' .exists() '' дон, забудьте скобки –

ответ

0

Эта проблема встречающихс потому что вы пытаетесь бросить первое значение CSV, который является строка в файле CSV к int здесь:

if not user2.objects.filter(number=int(row[0])).exists(): 

Вы можете изменить свой код, чтобы это пропустить первый CSV значение представляет собой строку и перейти от второго значения 0001

try: 
    if not user2.objects.filter(number=int(row[1])).exists(): 
     #do stuff 
except ValueError: 
    # csv value was not an int 
+0

всегда заключает в за исключением, почему я Это происходит? db пуст, поэтому каждый раз, когда я проверяю его, он должен входить в значение – Hook

+0

. Первое значение в вашем файле csv выглядит как строка, когда вы вводите строку в int с помощью 'int()', она будет вызывать 'ValueError '. Можете ли вы опубликовать обновленный код? – Karl

+0

Я только что обновил код @Kari – Hook