【问题标题】:Accessing nested attributes in overwritten object using Django使用 Django 访问覆盖对象中的嵌套属性
【发布时间】:2015-02-22 05:13:18
【问题描述】:

在这里发布;我相信我在弄清楚它时会遇到一些麻烦,它可能会节省我一些时间。

在 python 中你可以这样做:

>>> class Toto():
...     def w(self):
...         print(self.name)
...
...
...
>>> class Tata(Toto):
...     name = 'Hehehehe'
...
...
>>>
>>> e = Tata()
>>> e.w()
Hehehehe
>>>

很难,使用 Django 我在完全相同的上下文中遇到了这个错误:

object has no attribute 'name'

所以我试着弄清楚我的一些对象是否没有属性“名称”,但似乎它们都有。

两个问题:

Django 方面对这种事情有什么限制吗?

如何检查哪个对象引发了错误,以便检查它是否具有正确的属性?

【问题讨论】:

    标签: python django object models


    【解决方案1】:

    我已经弄明白了!

    所以模型覆盖会在宿主类中创建一个新属性

    class Base(models.Model):
        def __str__(self):
            objs = ['Extended'] # name of the overwriting object
            for ob in objs:
                try:
                    return getattr(self, ob).name
                except:
                    pass
            return 'Unbinded overwritten object'
    
    class Extended(models.Model):
        name = models.CharField(max_length=300)
    

    Base 获得一个新属性,称为扩展。因此访问内部的自定义属性需要通过覆盖对象名称。

    > t = Extended(name='test')
    > t.save()
    > bases = Base.objects.all()
    > b[0].Extended.name
    'test'
    

    祝大家圣诞快乐

    【讨论】:

      猜你喜欢
      • 2012-11-12
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      • 2016-07-13
      相关资源
      最近更新 更多