我想要一个唯一的字段,以获取其所属模型的名称。我试图使用get_model,但它还有另一个用途。
假设您有一所拥有多个教室的学校(每个教室都是一个模型),并且您想搜索仅带有其ID的学生,并接收该学生所在的教室的名称。
因此,您输入ID(主键),该函数将为您返回学生所属的班级(模型)
答案 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)