在Django中将User传递给ForeignKey时出错

时间:2012-04-24 23:59:19

标签: python django typeerror

我正在尝试将一个User模型作为models.py文件中ForeignKey的参数传递,但我收到错误TypeError: int() argument must be a string or a number, not 'User'

以下是我的档案,请告诉我我做错了什么:

models.py

from django.db import models

class Lesson(models.Model):
    name = models.CharField(max_length=30)
    author = models.ForeignKey('auth.User')
    description = models.CharField(max_length=100)
    yt_id = models.CharField(max_length=12)
    upvotes = models.IntegerField()
    downvotes = models.IntegerField()
    category = models.ForeignKey('categories.Category')
    views = models.IntegerField()
    favorited = models.IntegerField()

    def __unicode__(self):
        return self.name

populate_db.py

from django.contrib.auth.models import User
from edu.lessons.models import Lesson
from edu.categories.models import Category

users = User.objects.all()

cat1 = Category(1, 'Mathematics', None, 0)
cat1.save()
categories = Category.objects.all()

lesson1 = Lesson(1, 'Introduction to Limits', users[0], 'Introduction to Limits', 'riXcZT2ICjA', 0, 0, categories[0], 0, 0)
lesson1.save() # Error occurs here

3 个答案:

答案 0 :(得分:1)

在这里使用位置参数非常混乱,似乎是原因。

我可以在我自己的一个模型上使用ForeignKey上的位置参数来重现您的错误。使用kwargs解决了这个问题。

我甚至没有兴趣研究为什么 - 我从来没有使用过令人困惑的位置参数来填充模型(如果你曾经修改过你的模型,似乎他们会一直打破混乱的消息)

编辑:或者更糟糕的是,随着时间的推移输入字段转到错误的模型字段时出现无声错误。

答案 1 :(得分:0)

来自django.contrib.auth import User(忘了确切的导入电话) author = models.ForeignKey(User)

编辑(添加):我会按照我说的方式导入用户,并使用'author.category'来表示其他关系。虽然知道更多关于Django的人比我更了解,但这已得到解决。

答案 2 :(得分:0)

您应该使用关键字参数以及使用默认字段值对其进行初始化。

class Lesson(models.Model):
    name = models.CharField(max_length=30)
    author = models.ForeignKey('auth.User')
    description = models.CharField(max_length=100)
    yt_id = models.CharField(max_length=12)
    upvotes = models.IntegerField(default=0)
    downvotes = models.IntegerField(default=0)
    category = models.ForeignKey('categories.Category')
    views = models.IntegerField(default=0)
    favorited = models.IntegerField(default=0)

    def __unicode__(self):
        return self.name


lesson1 = Lesson(name='Introduction to Limits', author=users[0], description='Introduction to Limits', yt_id='riXcZT2ICjA', category=categories[0])
lesson1.save()