2014-07-18 66 views
0

我用下面的代码来导入csv文件在模块中使用含有manytomanyfield Release.metamodules模型CSV导入到manytomanyfield Django的

>>> from app.models import Metamodule,Release 
>>> reldata = csv.reader(open('/root/Django-1.6.5/django/bin/dashboard/release.csv'),delimiter=',') 

for row in reldata: 
    q = Release(number = row[0], 
     notes= row[1], 
     changes = row[2], 
     metamodules = Metamodule.objects.filter(name = row[3])) 

    try: 
     q.save() 
    except: 
    # if the're a problem anywhere, you wanna know about it 
    print "there was a problem with line" 

错误:

Traceback (most recent call last): 
File "<console>", line 5, in <module> 
File "/usr/local/lib/python2.7/site-packages/django/db/models/base.py", line 416, in __init__ 
    raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0]) 
TypeError: 'metamodules' is an invalid keyword argument for this function 

作为现场是ManyToManyField我用objects.fileter获取多条记录。但它返回error.Please帮我解决这个问题

models.py:

class Metamodule(models.Model): 
    name = models.CharField(max_length=50) 
    version = models.IntegerField(default=0) 
    modulename = models.ForeignKey(Module) 
    createdate = models.DateField(auto_now=True, null=True) 
    createdby = models.CharField(max_length=50) 

    def __unicode__(self): 
     return unicode(self.name) 


class Release(models.Model): 
    number = models.IntegerField(default=0) 
    notes = models.CharField(max_length=50) 
    changes = models.CharField(max_length=50) 
    metamodules = models.ManyToManyField(Metamodule) 

    def __unicode__(self): 
     return unicode(self.number) 
+0

请正确调整*格式,因为它出现在'models.py'中 –

回答

0

你不能创造这样,你的发行对象。您不能从未保存的对象创建m2m关系。 See here

尝试这样:

for row in reldata: 
    q = Release(number=row[0], notes=row[1], changes=row[2]) 
    # You have to save the object before adding the m2m relations 
    q.save() 

    metamodules = Metamodule.objects.filter(name=row[3])  
    for metamodule in metamodules: 
     q.metamodules.add(metamodule) 

有可能是一个更好的方式来对循环做,但是这是你想要达到的目标。

+0

这应该嵌套循环仪式吗? – abhi3389

+0

对不起,我编辑了我的答案。如果答案确实解决了您的问题,请将答案标记为已接受。 – dguay

+0

如果我在那里使用ForeignKey而不是ManyToManyField,那么如何导入csv? – abhi3389