我正在尝试将一个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
答案 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()