【发布时间】:2019-03-01 22:27:59
【问题描述】:
我想用一个唯一的字段,来获取它所属的模型的名称。我试图使用 get_model 但它有另一个目的。
假设你有一所学校,有多个教室(每个教室都是一个模型),你想用他的 ID 搜索一个学生,接收学生所在的教室的名字。
输入 ID(主键),函数将返回学生所属的班级(模型)
【问题讨论】:
标签: django python-3.x django-models django-views
我想用一个唯一的字段,来获取它所属的模型的名称。我试图使用 get_model 但它有另一个目的。
假设你有一所学校,有多个教室(每个教室都是一个模型),你想用他的 ID 搜索一个学生,接收学生所在的教室的名字。
输入 ID(主键),函数将返回学生所属的班级(模型)
【问题讨论】:
标签: django python-3.x django-models django-views
我想用一个唯一的字段,来获取它所属的模型的名称。
要获取某个字段所属的模型,可以使用model attribute:
返回定义字段的模型。如果定义了一个字段 在模型的超类上,
model将引用超类,而不是 实例的类。
以上将回答您的问题,但更大的问题是:
假设您有一所学校有多个教室(每个 教室是一个模型),你想搜索一个学生 他的 ID,接收学生所在教室的名称。
这不是一个可持续的模式,并且会导致问题,因为每个教室都意味着一张新桌子。当您跨教室进行搜索时,这种结构会给您带来问题。
第二个问题是您将 字段的值 与 字段的名称 混淆了。主键(id)是一个值。如果您知道其中有什么字段,则可以搜索值,如果您想检索主键值为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)
【讨论】:
这个问题不是很清楚。
如果你有 Student 模型和 Classroom 模型,并且有一个从 Student 到 Classroom 的 ForeignKey,那么你需要从主键中获取 student:
student = Student.objects.get(pk=my_pk_value)
然后得到它的教室:
student.classroom
【讨论】: