django - 获取学生模型django中引用的元素(教师)的主键
问题描述
我是 Django 新手,我不知道如何访问主键。我有一个场景,其中有两个用户教师和学生与抽象用户一对一的关系。在我的情况下,教师创建学生帐户,我已成功创建教师帐户,我还想保存教师注册的学生,这也知道该怎么做,但我的问题是我也想在注册该特定学生的学生模型中保存老师,为此我想获得那个老师对象(当时正在添加学生的老师),我可以' t,有人可以提供建议或代码如何做到吗?
模型.py 文件:
class User(AbstractUser):
is_student=models.BooleanField(default="False")
is_prof=models.BooleanField(default="False")
class Teacher(models.Model):
user=models.OneToOneField(User,on_delete=models.CASCADE)
designation=models.CharField(max_length=30)
class Student(models.Model):
user=models.OneToOneField(User,on_delete=models.CASCADE)
teacher=models.ForeignKey(Teacher,on_delete=models.CASCADE,default="")
batch=models.CharField(max_length=30)
在我添加学生的方法下面,用户已成功创建,但在最后一行 student= 中要做什么,所以我可以通过teacher_id 进行教师对象:
obj=User.objects.create_user(
username=myids[iterate],password=passwords[iterate],
is_student=True,is_prof=False)
obj.save()
Student.objects.create(user=obj,teacher=(What to do?),batch="F-14")
解决方案
如果你创建一个field
是 a 的ForeignKey
,Django 会自动创建一个名为 的“孪生字段” field_id
,它存储id
. 更新some_object.field
反映在 中some_object.field_id
,反之亦然。
因此,您可以teacher_id
在此处使用该字段:
obj= User.objects.create_user(
username=myids[iterate],
password=passwords[iterate],
is_student=True,
is_prof=False
)
obj.save()
Student.objects.create(user=obj, teacher_id=myteacherid, batch="F-14")
另一种方法是首先使用给定的 获取Teacher
对象id
,然后使用它,但这效率较低,因为它会导致两个查询来构造对象:一个用于获取Teacher
,另一个用于创建Student
:
obj= User.objects.create_user(
username=myids[iterate],
password=passwords[iterate],
is_student=True,
is_prof=False
)
obj.save()
my_teacher = Teacher.objects.get(pk=myteacherid)
Student.objects.create(user=obj, teacher=myteacher, batch="F-14")
推荐阅读
- c - 这种手动应用范围标准 C 的做法吗?
- sockets - Watch OS 6:我可以在 watch os 6 上使用较低级别的套接字吗?
- intellij-idea - 如何在 Project Explorer 中隐藏 Intellij 文件大小/修改时间
- python - 当我打开 html 文件时,谷歌地图 pin 标记不显示
- java - 如何指定我的对象的宽度和高度 JAVA
- html - 为什么我的字体粗细和字母间距不能在 h1 之外工作?
- javascript - 在 jquery / javascript 中编辑后重新加载图像
- botframework - 一个 botframework 网络聊天对话应该如何维持一个多小时?
- r - 使用 highcharter 绘制地图时出现问题
- list - 列表中相邻元素乘积的 Haskell 函数