【问题标题】:Identify what model belongs a unique field (primary key)识别哪个模型属于一个唯一字段(主键)
【发布时间】:2019-03-01 22:27:59
【问题描述】:

我想用一个唯一的字段,来获取它所属的模型的名称。我试图使用 get_model 但它有另一个目的。

假设你有一所学校,有多个教室(每个教室都是一个模型),你想用他的 ID 搜索一个学生,接收学生所在的教室的名字。

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

【问题讨论】:

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


    【解决方案1】:

    我想用一个唯一的字段,来获取它所属的模型的名称。

    要获取某个字段所属的模型,可以使用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)
    

    【讨论】:

      【解决方案2】:

      这个问题不是很清楚。

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

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

      然后得到它的教室:

      student.classroom
      

      【讨论】:

        猜你喜欢
        • 2012-10-06
        • 2014-01-16
        • 1970-01-01
        • 2021-02-20
        • 2021-04-30
        • 2012-05-20
        • 2016-01-02
        • 2017-01-27
        • 2012-01-31
        相关资源
        最近更新 更多