首页 > 解决方案 > 获取学生模型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")

标签: djangodjango-models

解决方案


如果你创建一个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")

推荐阅读