python 错误:无法将关键字'id'解析到字段中

njthzxwz  于 2022-12-28  发布在  Python
关注(0)|答案(2)|浏览(218)
class Profile(models.Model):
    name=models.CharField(max_length=20, primary_key=True )
    age=models.IntegerField()

    def __str__(self):
        return self.name

class Like(models.Model):
    user=models.ForeignKey(Profile,on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    like=models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

在python manage.py shell 命令中:

from database.models import Profile, Like 
    p=Profile(name='test', age=66)
    p.save()
    p.id

AttributeError                            Traceback (most recent call last)
<ipython-input-35-25ec00f2e4bf> in <module>
----> 1 p.id

但是如果你按照www.example.com上的例子www.djangoproject.com,你会看到www.example.com的结果p.id是1。
任何帮助将不胜感激,以了解数据库,因为我从来没有工作过的数据库。

tkclm6bt

tkclm6bt1#

您的模型具有primary_key字段name
因此,如果您保存()您的模型,它将不会有一个名为id的字段,因为这是一个默认的primary_key-字段,如果您没有定义任何字段。
您可以通过obj.pk(或您的情况下的obj.name)访问primary_key

5cg8jx4n

5cg8jx4n2#

当数据库中的主键不被称为“id”时,也会出现此消息
必须由用户来命名主键(特别是当数据库较旧时)
以下模型定义出错
第一个月
以下模型定义更正错误,数据库主键不变
id = models.AutoField(primary_key=True,db_column='examination_id')
注意django对“id”很满意,mysql对任何主键的命名都是免费的。

相关问题