使用 Django 访问覆盖对象中的嵌套属性



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

在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方面对这种事情有什么限制吗?

如何检查哪个对象抛出错误,以便我可以正确检查它是否具有属性?

我已经能够弄清楚了!

因此,模型覆盖会在主机类中创建一个新属性

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 获取一个名为 EXTENDED 的新属性。因此,访问内部的自定义属性需要传递覆盖对象名称。

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