【问题标题】:Get all related objects of an object in Django?在Django中获取对象的所有相关对象?
【发布时间】:2013-01-23 08:36:12
【问题描述】:

假设我有一个包含相关(外键)字段的模型。同样,这些外键字段可能引用可能包含或可能不包含相关字段的模型。请注意,Django 中的关系字段可能是一对一、多对一或多对多。

现在,给定一个模型实例,我想递归地、动态地获取与其相关的模型的所有实例,无论是直接还是间接。从概念上讲,我想遍历相关对象并返回它们。

例子:

class Model1{
   rfield1 = models.ForeignKey("Model2")
   rfield2 = models.ManyToManyField("Model3")
   normalfield1 = models.Charfield(max_length=50)
}
class Model2{
   sfield = models.ForeignKey("Model3")
   normalfield = models.CharField(max_length=50)
}
class Model3{
   normalfield = models.CharField(max_length=50)
}

假设我有一个模型Model1 model1 的实例,我想获取与其直接相关的对象,即所有 Model2 和 Model3 对象,以及间接相关的对象,即与检索到的 Model2 对象相关的所有 Model3 对象之前。我还想考虑在 OTHER MODEL 上定义相关字段的一对一字段的情况。

另外,请注意,我可能不知道我当前正在处理的实例的模型。假设在前面的示例中,我现在可能不是 model1Model1 模型的实例。所以我想动态地执行所有这些。

为此,我认为我需要一种方法来获取对象的所有相关字段。

  1. 如何获取一个对象的所有相关字段?
  2. 我应该如何使用它们来获取实际的相关对象?

或者有没有办法更好地做到这一点?非常感谢你!

更新:

我已经知道如何执行1,而2基本上直接从1。:)稍后更新。

【问题讨论】:

  • (1)你为什么要这样做和(2)你有没有看过generic relationships in Django;如果是这样,为什么这还不够?
  • (1) 我想对这些对象执行一些操作。 #2 我还不明白泛型关系与我的问题的相关性。 tnx!

标签: django django-models


【解决方案1】:

如果你有 model1 获取所有它的多对多字段名称(等)很容易,因为这是众所周知的,并且这些都存储在元的 'local_many_to_many' 列表中:

[model1._meta.local_many_to_many 中字段的field.name]

外键有点棘手,因为它们与元的“local_fields”列表中的所有其他字段一起存储。因此,我们需要确保它具有某种关系。这可以按如下方式完成:

[model1._meta.local_fields if field.rel 中字段的field.name]

此方法不需要了解您的模型。如果名称不够,还可以对字段对象进行进一步的询问。

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 2020-07-15
    • 2013-08-18
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    相关资源
    最近更新 更多