【问题标题】:Getting items in model referenced by a onetoonemodel in django在 django 中获取 onetoonemodel 引用的模型中的项目
【发布时间】:2015-12-23 05:07:12
【问题描述】:

我有这个数据库布局

class Clinic(models.Model):


class Menu(models.Model):
    ...
    menu = models.OneToOneField(Clinic, related_name='menu')


class Item(models.Model):
    ...
    menu = models.ForeignKey('Menu')

我想从我的诊所模型访问我的菜单模型和链接到该菜单的项目。

我试过了

In [5]: clinic = Clinic.objects.get(pk=1)

    In [12]: clinic.menu
Out[12]: <Menu: Menu object>

In [13]: clinic.menu.objects.all()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-13-2aff8882b6ad> in <module>()
----> 1 clinic.menu.objects.all()

/Users/gabriel/.virtualenvs/meed_waps/lib/python3.4/site-packages/django/db/models/manager.py in __get__(self, instance, type)
    253     def __get__(self, instance, type=None):
    254         if instance is not None:
--> 255             raise AttributeError("Manager isn't accessible via %s instances" % type.__name__)
    256         return self.manager
    257 

AttributeError: Manager isn't accessible via Menu instances

但它告诉我经理无法访问它。从概念上讲,我似乎应该能够通过像诊所 > 菜单 > 项目这样的诊所模型追踪关系来访问项目并获取列表。我应该这样做吗?

【问题讨论】:

标签: python django django-models django-managers


【解决方案1】:

clinic.menu.objectsMenu 模型的 ModelManager - 请注意,它是 Menu 的属性,而不是您的 clinic.menu 实例的属性。 ModelManager 类用于查询基础表,不应该直接从实例调用(无论如何这没有多大意义),因此会出现错误消息。

从概念上讲,我似乎应该能够通过像诊所 > 菜单 > 项目这样的诊所模型追踪关系来访问项目并获取列表

这确实是可能的(希望如此),但你在哪里提到 itemsclinic.menu.objects 中?你想要clinic.menu.item_set.all()

【讨论】:

    【解决方案2】:

    试试这个:

    Clinic.objects.get(pk=1).menu.item_set.all()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 2013-06-08
      • 2016-11-18
      • 2021-12-16
      相关资源
      最近更新 更多