2013-09-17 2 views
2

У меня есть скрипт импорта, импорт из файла CSV, но одно значение (заказчик) может повторяться. Так, например, имя всегда будет отличаться, но клиент (john) может иметь 5 записей. Мне нужно импортировать это в внешний ключ с именем customer для других целей. Но я не знаю, как это сделать.Как я могу импортировать много значений одного внешнего ключа

Моя модель

class Route_destinguisher(models.Model): 
    name = models.CharField(max_length=100) 
    customer = models.CharField(max_length=100) 
    comment = models.TextField(blank=True) 
    active = models.BooleanField(default=True) 
    rd = models.CharField(max_length=20, default='33763:264') 
    def __unicode__(self): 
      return self.name 

Мой код Импорт

dataReader = csv.reader(open(csv_filepathname), delimiter=',', quotechar='"') 

for row in dataReader: 
     route_distinguisher = Route_destinguisher() 
     route_distinguisher.customer=row[2].split("-")[0] 
     route_distinguisher.name=row[2] 
     route_distinguisher.rd=row[1].replace('\t',':') 
     route_distinguisher.save() 
     print row 

ответ

0

Во-первых, вам необходимо создать новую модель Customer с name поле, Route_destinguisher модель должна иметь внешний ключ к Customer:

class Customer(models.Model): 
    name = models.CharField(max_length=100) 

class Route_destinguisher(models.Model): 
    name = models.CharField(max_length=100) 
    customer = models.ForeignKey(Customer) 
    comment = models.TextField(blank=True) 
    active = models.BooleanField(default=True) 
    rd = models.CharField(max_length=20, default='33763:264') 
    def __unicode__(self): 
      return self.name 

n, используйте get_or_create() в цикле при импорте csv:

dataReader = csv.reader(open(csv_filepathname), delimiter=',', quotechar='"') 

for row in dataReader: 
    route_distinguisher = Route_destinguisher() 
    route_distinguisher.customer = Customer.objects.get_or_create(name=row[2].split("-")[0]) 
    route_distinguisher.name = row[2] 
    route_distinguisher.rd = row[1].replace('\t',':') 
    route_distinguisher.save() 
    print row 
Смежные вопросы