Reputation: 369
(I have read a few related questions, but none seems to have the answer for my particular problem, or perhaps I have misunderstood them.) In my app I have a model Kurs, and each Kurs is assigned to a user in this way:
class Kurs(models.Model):
prowadzacy = models.ForeignKey(User)
I want to populate my database of Kurs's from a CSV. The 0th element of each row is a username. So in my reader routine I wrote what follows (skipping the, I hope, irrelevant details):
n = Kurs()
n.prowadzacy = User.objects.get(username=row[0])
Now, in the shell, when I do this, what I'm getting is, I thought, a User instance:
>>> User.objects.get(username='leszekwronski')
<User: leszekwronski>
But when I run my reader routine it tells me it does not actually have a User instance to assign to the 'prowadzacy' field:
ValueError: Cannot assign "'leszekwronski'": "Kurs.prowadzacy" must be a "User" instance.
What am I doing wrong?
(I considered that maybe I'm getting the id of the User, so I also halfheartedly tried
n.prowadzacy = User.objects.get(id=User.objects.get(username=row[0]))`
but arrived at the same error.)
-------------------------- EDIT This is my whole reader routine:
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()
I thought the details about other fields were not relevant...
----------------- EDIT 2 After RichSmith's comments below, I have added
from django.contrib.auth.models import User
to the reader routine. The error now changed to the following:
TypeError: int() argument must be a string or a number, not 'User'
and the error is assigned to the same line as before.
---------------------- EDIT 3: Let this be a lesson to all of us newbies :-) After restarting the shell, everything is working. It seems RichSmith's idea was the needed fix!
Upvotes: 0
Views: 1232
Reputation: 940
are you importing User? from django.contrib.auth.models import User
Upvotes: 1