从CSV创建模型实例时“无法分配/必须是实例”错误(与ForeignKey相关)

时间:2016-11-25 10:06:42

标签: python django csv

(我已经阅读了一些相关问题,但似乎没有人能解答我的特定问题,或者我可能误解了它们。)在我的应用程序中,我有一个模型 Kurs ,每个Kurs以这种方式分配给用户:

class Kurs(models.Model):
    prowadzacy = models.ForeignKey(User)

我想从CSV填充我的Kurs数据库。每行的第0个元素是用户名。因此,在我的阅读器例程中,我写了以下内容(跳过,我希望,无关的细节):

n = Kurs()
n.prowadzacy = User.objects.get(username=row[0])

现在,在shell中,当我这样做时,我想到的是用户实例:

>>> User.objects.get(username='leszekwronski')
<User: leszekwronski>

但是当我运行我的阅读器例程时,它告诉我它实际上没有一个用户实例分配给'prowadzacy'字段:

ValueError: Cannot assign "'leszekwronski'": "Kurs.prowadzacy" must be a "User" instance.

我做错了什么?

(我认为也许我得到了用户的身份,所以我也半心半意地尝试了

n.prowadzacy = User.objects.get(id=User.objects.get(username=row[0]))`         

但是出现了同样的错误。)

--------------------------编辑 这是我的整个读者常规:

from .models import *

import csv

def importcourses(filename):
    dataReader = csv.reader(open(filename), delimiter=';', quotechar='"')
    for row in dataReader:
        if row[0] != 'Username': # Ignore the header row, import everything else
            n = Kurs()
            n.prowadzacy = User.objects.get(username=row[0])
            n.nazwa = row[1]
            n.opis = row[2]
            n.kategoria = Kategoria.objects.get(id=row[3])
            n.semestr = Semestr.objects.get(id=row[4])
            n.ects = row[5]
            n.godziny = row[6]
            n.kanon = row[7]
            n.otwarty = row[8]
            n.save()

我认为其他领域的细节并不相关......

-----------------编辑2 在RichSmith的评论如下之后,我添加了

from django.contrib.auth.models import User

到读者程序。现在错误已更改为以下内容:

TypeError: int() argument must be a string or a number, not 'User'

并将错误分配给与之前相同的行。

----------------------编辑3: 让这成为我们所有新手的一个教训:-)重新启动shell后,一切正常。似乎RichSmith的想法是必要的解决方案!

1 个答案:

答案 0 :(得分:1)

你正在导入用户吗?来自django.contrib.auth.models导入用户