确定哪个模型属于唯一字段(主键)

时间:2019-03-01 22:27:59

标签: django python-3.x django-models django-views

我想要一个唯一的字段,以获取其所属模型的名称。我试图使用get_model,但它还有另一个用途。

假设您有一所拥有多个教室的学校(每个教室都是一个模型),并且您想搜索仅带有其ID的学生,并接收该学生所在的教室的名称。

因此,您输入ID(主键),该函数将为您返回学生所属的班级(模型)

2 个答案:

答案 0 :(得分:1)

这个问题不是很清楚。

如果您有一个Student模型和一个Classroom模型,并且有一个从Student到Classroom的ForeignKey,那么您需要从主键中获取该学生:

student = Student.objects.get(pk=my_pk_value)

然后进入教室:

student.classroom

答案 1 :(得分:1)

  

我想在一个唯一字段中获取其所属模型的名称。

要获取字段所属的模型,可以使用model attribute

  

返回定义字段的模型。如果定义了一个字段   在模型的超类上,model将引用该超类,而不是   实例的类。

以上内容将回答您的问题,但与此相关的是更大的问题:

  

假设您有一所学校设有多个教室(每个教室   教室是一个模型),而您只想用   他的ID,接收学生所在教室的名称。

这不是一个可持续的模型,因为每个教室都意味着一张新桌子,因此会引起问题。当您跨教室搜索时,这种结构会给您带来麻烦。

第二个问题是您将字段的与字段的名称混淆。主键(id)是 value 。如果您知道其中包含什么字段,则可以搜索值;如果要检索主键值为1的记录,则可以编写如下查询:

SELECT * FROM classroom_table WHERE id = 1

在Django中,这是Classroom.objects.get(id=1)

您不能反过来说,即“找到我的表,在id字段中值为“ 1”” ,这是您要在此处执行的操作

您需要修复数据库结构,以便为学生提供一种模型,为教室提供一种模型;一个学生可以属于许多教室:

class Student(models.Model):
   name = models.CharField(max_length=200)

class Classroom(models.Model):
   students = models.ManyToMany(Student)

现在您可以执行为ID为1的学生查找所有教室的操作

student = Student.objects.get(id=1)
for room in student.classroom_set.all():
   print(room)