我想在django中将数据插入模型类时出错?

时间:2014-08-19 09:13:25

标签: python mysql sql django

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

我的项目名称是"学生"并在学生的模型中写了两个课程,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')

这是我的mysite / student / admin:

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

当我想从" localhost:8000 / admin /"添加学生和新课程_item时我为添加学生收到此错误:

/ admin / student / student / add /中的

TypeError ' INT'对象没有属性' getitem '

并在我想添加course_item时出现此错误:

/ error / student / course_item / add /中的OperationalError (1054,"未知栏' student_course_item.std_id_id'在' where子句'")

如果有人帮助我,我会很高兴我为我糟糕的英语道歉。

1 个答案:

答案 0 :(得分:0)

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

那么,为什么你有2个属性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或modelInstance.id