【问题标题】:How to select objects of a model related to my model如何选择与我的模型相关的模型对象
【发布时间】:2019-07-05 10:22:54
【问题描述】:

我正在为我的应用程序创建一个过滤系统,我想呈现<select> 字段,并预先填充可能的选项。

假设我有一个名为 Exam 的模型,它与 Student 相关,这与 StudentProfile 相关 - 我正在按学生个人资料中的字段 has_scholarship 过滤 Exam 对象,所以我正在创建一个查询,例如:student__student_profile_has_scholarship 并将其传递给 django 的 filter() 函数,它就可以工作了。

然而,现在我想用所有可能的<option>s 来呈现 html 表单,为此我需要找到提到的可能选项。 如何从上述查询字符串中找到所有对象,以从我的 Exam 模型中获取 student__student_profile 的所有对象? 无论关系链有多长,这也必须有效假设关系都是正确的。

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:

    我假设有模型:

    class Exam(models.Model):
        example = models.CharField(max_length=255, default="")
    
    
    class Stydent(models.Model):
        exam = models.ManyToManyField(Exam, related_name="students")
    
    
    class StydentProfile(models.Model):
        stud = models.ForeignKey(Stydent, related_name="profiles",
                                 on_delete=models.SET_NULL, default=None, null=True)
    

    如果是:从exam 获取所有学生或个人资料:

    In [27]: exam
    Out[26]: <Exam: Exam object (1)>
    
    In [27]: exam.students.all()
    Out[28]: <QuerySet [<Stydent: Stydent object (1)>]>
    
    In [29]: exam.students.model.objects.all()
    Out[29]: <QuerySet [<Stydent: Stydent object (1)>, <Stydent: Stydent object (2)>]>
    
    In [30]: exam.students.model.profiles.field.model.objects.all()
    Out[30]: <QuerySet [<StydentProfile: StydentProfile object (2)>, <StydentProfile: StydentProfile object (1)>]>
    

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 2018-12-12
      • 1970-01-01
      • 2020-12-16
      • 2013-08-07
      相关资源
      最近更新 更多