2014-03-12 121 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因爲我在這裏寫的是相當多的複製粘貼:)。