【问题标题】:django:adding more than one value in model fielddjango:在模型字段中添加多个值
【发布时间】:2017-01-10 23:17:57
【问题描述】:

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

模型.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)

【问题讨论】:

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


    【解决方案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 表示法。

    【讨论】:

    • 我想我应该在学生的 models.py 中添加另一个字段
    • @RohitChopra 我有错字,请检查我的答案
    • 但是一个学生也可以在多个班级。并且据此学生只能上一堂课。
    【解决方案2】:

    你应该创建一个单独的模型来存储学生,但更重要的是——你应该从他们官方网站上的 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 来实现。但请自己在文档中查看。

    【讨论】:

    • 但是一个学生也可以在多个班级。并且根据这个学生只能上一堂课
    猜你喜欢
    • 2017-11-02
    • 2020-04-20
    • 2019-01-19
    • 2019-09-20
    • 2016-05-24
    • 2015-12-06
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多