【问题标题】:I get error when I want to insert data to classes of model in django?当我想在 django 中向模型类中插入数据时出现错误?
【发布时间】:2025-11-28 08:15:02
【问题描述】:

我正在学习 django,我正在阅读“https://docs.djangoproject.com”并尝试为自己做他们的榜样。

我的项目名为“student”,在student's models中写了两个class,mysite/student/models:

from django.db import models

class student(models.Model):
    id=models.IntegerField(max_length=3,primary_key=True)
    name=models.CharField(max_length=200)
    email=models.EmailField(max_length=200)
    phone=models.IntegerField(max_length=10)
    def __unicode__(self):
        return self.id


class course_item(models.Model):
    course_id=models.IntegerField(max_length=5)
    course_name=models.CharField(max_length=40)
    score=models.IntegerField(max_length=2)
    std_id=models.IntegerField(max_length=3)
    std_id = models.ForeignKey(student)

    def __unicode__(self):
        return u'%s %d' % (self.course_name, self.student)

    class Meta:
        unique_together = ('course_id', 'std_id')

这是我的网站/学生/管理员:

from django.contrib import admin
from student.models import *
admin.site.register(student)
admin.site.register(course_item)

当我想从“localhost:8000/admin/”添加学生和新 course_item 时,添加学生时出现此错误:

TypeError 在 /admin/student/student/add/ “int”对象没有属性“getitem

当我想添加 course_item 时得到这个错误:

/admin/student/course_item/add/ 处的操作错误 (1054,“'where 子句'中的未知列'student_course_item.std_id_id'”)

如果有人帮助我,我很高兴,我为我的英语不好表示歉意。

【问题讨论】:

  • 您是否运行:“python manage.py syncdb”来创建数据库?
  • 是的,我运行它然后运行“python manage.py runserver”,我的课程有问题吗?

标签: python mysql sql django


【解决方案1】:

首先,类属性不要使用std_id,默认情况下django会在数据库中为ForeignKey字段创建一个带有property_id的列。

那么,为什么你有两个属性std_id

在你的例子中你这样做:

def __unicode__(self):
    return u'%s %d' % (self.course_name, self.student)

但您的模型类中没有任何学生属性,只有 std_id。

尝试通过以下方式更改它:

class Course(models.Model):
    course_id = models.IntegerField(max_length=5)
    course_name = models.CharField(max_length=40)
    score = models.IntegerField(max_length=2)
    student = models.ForeignKey(student)

    def __unicode__(self):
        return u'%s %d' % (self.course_name, self.student_id)

    class Meta:
        unique_together = ('course_id', 'student')

编辑

仅供参考,您不需要为模型手动设置 id 属性,如果您只需要基本的主键标识符,django 会为您创建它,您可以使用 modelInstance.pk 或模型实例.id

【讨论】:

  • 你更新你的数据库了吗?请注意,如果您使用 django python manage.py syncdb 不会更新现有表中的字段,您必须删除它或使用south 进行迁移