Соответствие внешних ключей таблицы django с функцией фильтра - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь загрузить CSV в таблицу Django.Я не могу сопоставить данные с внешними ключами.'cpt' - это внешний ключ от модели цены к сервису.Есть много строк цены, которые отображаются на одну строку cpt, но каждая отдельная строка имеет только один cpt.

Вот мой код загрузки.

path = "/Users/joannerodrigues/Documents/csv_import/"
os.chdir(path)
from catalog.models import Service, Price
with open('price.csv') as csvfile:
     reader = csv.DictReader(csvfile)                             
     for row in reader:  
           p = Price(com_desc=row['com_desc'],
                     service=Service.objects.filter(cpt=str(row['cpt']))[0])
           p.save()

Это ошибка, которую я получаю:

site-packages/django/db/models/query.py", line 303, in __getitem__
    return qs._result_cache[0]
IndexError: list index out of range   

Вот как выглядят данные: Цена данных: (Заголовок включен в CSV-файл)

com_des, cpt
"desc 1", '57647'
"desc 2", '87654'

Сервисные данные: (заголовок включен в файл)

desc_us, cpt, price
"desc1....", '57647', '89.95'
"dsc2.....", '87654', '875.87'

Вот модели.py Цена

class Price(models.Model):
  com_desc = models.CharField(max_length = 200, blank = True, null = True)
  service = models.ForeignKey("Service", on_delete=models.SET_NULL, null=True)

Сервис

class Service(models.Model):
    desc_us = models.TextField(blank=True, primary_key = True)
    cpt = models.IntegerField(default= 10000)

1 Ответ

0 голосов
/ 04 марта 2019

Ваш Service.cpt является целочисленным полем, поэтому оно никогда не будет соответствовать строке.Вы должны вместо row['cpt'] преобразовать в целое число для фильтрации:

service=Service.objects.filter(cpt=int(row['cpt']))[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...