簡體   English   中英

匹配帶有過濾功能的Django表外鍵

[英]Matching django table foreign keys with filter function

我正在嘗試將CS​​V上傳到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)

您的Service.cpt是一個整數字段,因此它永遠不會與字符串匹配。 您應該將row['cpt']轉換為整數,而不是進行過濾:

service=Service.objects.filter(cpt=int(row['cpt']))[0])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM