【问题标题】:Get the set of objects from Many To One relationship two levels deep从两层深的多对一关系中获取对象集
【发布时间】:2017-02-21 16:10:53
【问题描述】:

我有 3 个模型,我想从给定第一个模型的第 3 个模型中获取所有相关对象的集合。

例如:

Clas Dealer(models.Model):
..

class Make(models.Model):
dealer = models.ForeignKey(Dealer)
..

Class Modell(models.Model):
Make = models.ForeignKey(Make)
..

在给定Dealer? 的情况下,我将如何获取所有相关的Modell 对象?经销商对象以kwargs['instance'] 的形式传递

编辑 我不能使用.objects.filter(..)

编辑 2

from django.apps import AppConfig
from django.db import models


class CarConfig(AppConfig):
    name = 'cars'
    verbose_name = 'cars'


    def ready(self):
        from cars.models import Car, Make, Modell
        models.signals.post_save.connect(CarConfig.reindex_related_carmodels, sender=Dealer, weak=False,
                                             dispatch_uid="reindex_related_carmodels")

        @staticmethod
        def reindex_related_carmodels(sender, **kwargs):
            from cars.search_indexes import ModelIndex
            models = Modell.objects.all()
            ...

我得到的错误是:global name 'Modell' is not defined

编辑 3 如果我尝试在 ready 之外导入任何模型,我会得到:

File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 124, in check_apps_ready
web_1  |     raise AppRegistryNotReady("Apps aren't loaded yet.")
web_1  | django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

编辑 4 解决方案是在@staticmethod 中进行模型导入:)

【问题讨论】:

  • 为什么你认为你不能使用过滤器?这是从数据库中获取内容的方法。你打算改用什么?
  • 我正在更新apps.py 中python 文件中的信号。 from django.apps import AppConfig。因此,我很确定我不能使用 .filter。如果可以的话,我不知道该怎么做。
  • 呃,这有什么关系?为什么这意味着您不能使用过滤器?
  • 因为您无权访问该级别的 Djano 管理器
  • 是的。请显示您执行此操作的实际代码,以及您尝试时遇到的错误。

标签: python django elasticsearch


【解决方案1】:

尝试进行类似的查询

Model.objects.filter(Make__dealer=kwargs['instance'])

【讨论】:

  • 感谢您的帮助。我不能使用objects.filter,这就是问题所在。我将添加一个编辑
  • 解决我的导入问题后,上述工作。正如预期的那样。
猜你喜欢
  • 2013-11-16
  • 2021-10-31
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 2018-12-10
  • 2022-01-17
相关资源
最近更新 更多