获取在学生模型django中引用的元素(教师)的主键

时间:2018-08-23 13:09:05

标签: django django-models

我是Django的新手,我不知道如何访问主键。我有一个场景,其中有两个用户,老师和学生与抽象用户一对一的关系。在我的情况下,老师创建学生帐户,我已经成功创建了老师帐户,我也想保存由老师注册的学生我知道该怎么做,但是我的问题是我也想将老师保存为注册该特定学生的学生模型,为此,我想获得我可以做到的那个老师对象(当时正在添加学生的老师)。 t,有人可以提供建议或代码怎么做?

Models.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 =中要做的事情,因此我可以通过教师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")

2 个答案:

答案 0 :(得分:0)

如果您创建的fieldForeignKey,则Django会自动创建一个名为field_id的“孪生字段”,其中存储了idsome_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")

答案 1 :(得分:0)

您可以获取教师对象并将其分配给学生模型中的“教师”字段。

teacher = get_object_or_404(教师,pk = primary_key_of_teacher

student = Student(用户= user_object 老师= 老师 batch = student_batch

student.save()