2014-03-12 80 views
0

我已经Django模型定义为上传CSV文件到Django模型

class Event(models.Model): 
    event_id=models.IntegerField(primary_key=True) 
    OS_CHOICE=(('Win 2003','windows 2003'), 
     ('Win 2008','Windows 2008'), 
     ('Win XP','Windows XP'), 
     ('Win VISTA','Win VISTA'), 
     ('Win 2007','Windows 2007'), 
     ) 
    windows=models.CharField(max_length=10,choices=OS_CHOICE,default='Win 2003') 

    def __unicode__(self): 
     return " %s, event_id :%s" \ 
      % (self.windows, self.event_id) 
    class Meta: 
     db_table= 'event' 
     verbose_name_plural='events' 
class Eventgroups(models.Model): 
    event=models.ManyToManyField(Event) 
    group_name=models.CharField(max_length=100) 

    def __unicode__(self): 
     return "%s, %s" \ 
      % (self.group_name, self.event) 
    class Meta: 
     db_table= 'eventgroup' 
     verbose_name_plural='eventgroups' 

我想写一个Django视图上进口,这将ANABLE用户浏览到CSV文件,然后单击上传/导入选定的csv文件到上面定义的模型(请考虑您的M2M领域回答)。 任何人都可以请给一些指导呢? 基于我的模型的例子将不胜感激。 问候

+0

那m2m字段呢?你的csv将如何?这里有什么样的数据作为行,如果你认为在这里提到m2m字段很重要?思考表格 - 你怎么能用单个csv表创建多表关系? –

+0

奥多夫我得到你了。假设我没有M2M条件,这怎么可能实现? – Joshua

+0

如果csv文件具有与event(event_id,OS_CHOICE,windows)的字段值匹配的列名称,那么可以使用python csv dictreader从csv行创建字典,然后遍历这些行并只调用e = Event (**行),e.save(),其中行是csv行之一。 –

回答

0

导入CSV

f = 'your/file/name.csv' 
with open(f, 'r') as csvfile: 
    reader = csv.dictreader(csvfile, delimiter=';', quotechar='"') 
    for row in reader: 
     e = Event(**row) 
     e.save() 

我敢肯定,你可以采取一切从这里太:http://docs.python.org/2/library/csv.html因为我在这里写的是相当多的复制粘贴:)。