django:在模型字段中添加多个值

时间:2016-09-02 19:04:05

标签: python django django-models django-forms django-views

我想为教室创建一个应用程序,其中只有一个老师和学生可以不止一个。一个学生可以在多个班级。我想将学生的用户名存储在一个教室中。是否有任何模型字段可用于存储学生的用户名。 我的代码到目前为止:

models.py

from django.db import models
from django.conf import settings
# Create your models here.

class classroom(models.Model):
    teacher = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
    students = models.CharField(max_length=120)

2 个答案:

答案 0 :(得分:1)

创建Student模型并向ClassRoom实例添加多对多键。通过这种方式,你正在告诉他们学生可能有几个教室,一个教室可能有很多学生"

class ClassRoom(models.Model):
    teacher = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)


 class Student(models.Model):
    name = models.CharField(max_length=120)
    classroom =  models.ManyToManyField(ClassRoom, related_name="students")

所以,如果你有一个classroom实例,并希望得到所有学生。注意字段教室中的related_name属性。

classroom.students.all()

如果您没有添加related_name属性,则需要使用_set表示法

classroom.student_set.all()

如果您有学生实例并想要上他的课堂

student.classroom

提示:对于类模型命名,请使用CamelCase表示法。

答案 1 :(得分:1)

你应该创建一个单独的模型来存储学生,但更重要的是 - 你应该从他们官方网站上的Django教程开始。

但是你的问题得到了相应的解决:

from django.db import models
from django.conf import settings

class ClassRoom(models.Model):
    teacher = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)

class Student(models.Model):
    name = models.CharField(max_length=128)
    class_room = models.ForeignKey(ClassRoom)

通过这种方式,您可以添加任意数量的学生。这是标准做法,但如果您真的只想保存名称而没有其他(并使用PostgreSQL),您也可以使用ArrayField。但请亲自在文档中查看。