【问题标题】:Get Primary key of an element(Teacher) which is referred in student model django获取学生模型django中引用的元素(教师)的主键
【发布时间】:2018-08-23 13:09:05
【问题描述】:

我是 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= 中要做什么,所以我可以通过 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")

【问题讨论】:

  • 您将获得StudentTeacher 对象与some_student.teacher,或idsome_student.teacher_id

标签: django django-models


【解决方案1】:

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

另一种方法是首先使用给定的id 获取Teacher 对象,然后使用它,但这样做效率较低,因为它会导致在两个查询中构造对象:一个获取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")

【讨论】:

  • 好吧,我假设您对老师 pk 编码有某种看法?
  • 这个视图到底是怎么命名的? 用户如何调用这个视图?
  • 视图被这个调用,url(r'^addfile/$',views.Addfile.as_view(),name='file')
  • @MUHAMMADNABEELL1F14BSCS0108:这似乎没有多大意义,因为这看起来像您添加文件。此外,URL 没有teacher 参数,因此参数应该在request.GETrequest.POST 中,但这通常由表单处理。你能用(相关的)视图和表格更新问题吗?
【解决方案2】:

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

teacher = get_object_or_404(Teacher, pk=primary_key_of_teacher)

student = Student(user=user_object teacher=teacher batch=student_batch)

student.save()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    相关资源
    最近更新 更多