匹配django表外键与过滤功能

问题描述 投票:0回答:1

我正在尝试将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'

这是models.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)
python django django-models django-filter
1个回答
0
投票

你的Service.cpt是一个整数字段,所以它永远不会匹配一个字符串。你应该将row['cpt']转换为整数而不是过滤:

service=Service.objects.filter(cpt=int(row['cpt']))[0])
© www.soinside.com 2019 - 2024. All rights reserved.