我学习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子句'")
如果有人帮助我,我会很高兴我为我糟糕的英语道歉。
答案 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