在 Django 中设计模型
Designing models in django
我正在处理我的第一个涉及学生成绩簿的 django 项目。从小做起,我只是在开发一个应用程序,教师可以在其中上传学生(学生信息——姓名和电子邮件地址)并将他们组织到课程中。到目前为止我的模型是:
class Course(models.Model):
course_name = models.CharField(max_length=20, default='Course')
def __unicode__(self):
return self.course_name
class Student(models.Model):
course = models.ForeignKey(Course)
name_text = models.CharField(max_length=40, default='First Last')
email_address = models.EmailField(max_length=40, default='address@address.com')
def __unicode__(self):
return self.name_text
但是,我不确定是否需要课程 class。我并没有多想,直到我尝试创建我的第一个表单,用户可以在其中将学生添加到数据库中。我试过:
class StudentForm(forms.ModelForm):
class Meta:
model = Student
fields= ('name_text',)
但这没有用。我会收到一条错误消息,指出课程字段不能为空("course_id" 列中的空值违反了非空约束)。于是我修改为:fields('course', 'name_text,)。成功了。
这让我想知道课程 class 是否真的有必要。最终我希望能够上传一个包含学生姓名的文本文件,解析文本以获取姓名(和电子邮件地址)并创建学生的实例。只有这样我才会给学生分配课程。但我感觉我现在设置模型的方式总是坚持为学生分配课程。
是否应该保留 class 课程?
如果学生-课程存在 1-n 关系(很多学生在一门课程,一个学生只在一门课程)是完全正确的。
使用 CharField 而不是保存 course_name
最终会导致不一致(也请参见数据库规范化),例如像这样开始:
name_text | course_name
-----------------------
chris | cs-101
doug | cs-101
现在 cs-101 更名为 cs-101-old,cs-101 是一门不同主题的新课程。然而,数据库仍然说我们都在新 "new" 课程中。如果你有一个 ForeignKey
到 Courses
你只需改变一个值,学生 table 中的值也会改变,因为它们只是指针。
如果您希望课程是可选的,只需在您的 ForeignKey 声明中添加 null=True
。
course = ForeignKey(Courses, null=True)
我正在处理我的第一个涉及学生成绩簿的 django 项目。从小做起,我只是在开发一个应用程序,教师可以在其中上传学生(学生信息——姓名和电子邮件地址)并将他们组织到课程中。到目前为止我的模型是:
class Course(models.Model):
course_name = models.CharField(max_length=20, default='Course')
def __unicode__(self):
return self.course_name
class Student(models.Model):
course = models.ForeignKey(Course)
name_text = models.CharField(max_length=40, default='First Last')
email_address = models.EmailField(max_length=40, default='address@address.com')
def __unicode__(self):
return self.name_text
但是,我不确定是否需要课程 class。我并没有多想,直到我尝试创建我的第一个表单,用户可以在其中将学生添加到数据库中。我试过:
class StudentForm(forms.ModelForm):
class Meta:
model = Student
fields= ('name_text',)
但这没有用。我会收到一条错误消息,指出课程字段不能为空("course_id" 列中的空值违反了非空约束)。于是我修改为:fields('course', 'name_text,)。成功了。
这让我想知道课程 class 是否真的有必要。最终我希望能够上传一个包含学生姓名的文本文件,解析文本以获取姓名(和电子邮件地址)并创建学生的实例。只有这样我才会给学生分配课程。但我感觉我现在设置模型的方式总是坚持为学生分配课程。
是否应该保留 class 课程?
如果学生-课程存在 1-n 关系(很多学生在一门课程,一个学生只在一门课程)是完全正确的。
使用 CharField 而不是保存 course_name
最终会导致不一致(也请参见数据库规范化),例如像这样开始:
name_text | course_name
-----------------------
chris | cs-101
doug | cs-101
现在 cs-101 更名为 cs-101-old,cs-101 是一门不同主题的新课程。然而,数据库仍然说我们都在新 "new" 课程中。如果你有一个 ForeignKey
到 Courses
你只需改变一个值,学生 table 中的值也会改变,因为它们只是指针。
如果您希望课程是可选的,只需在您的 ForeignKey 声明中添加 null=True
。
course = ForeignKey(Courses, null=True)