Django:覆盖get_FOO_display()

dtc*_*dtc 10 python django

一般来说,我不熟悉python重写方法和使用super()的方法.

问题是:我可以覆盖get_FOO_display()吗?

class A(models.Model):
   unit = models.IntegerField(choices=something)

   def get_unit_display(self, value):
     ... use super(A, self).get_unit_display() 
Run Code Online (Sandbox Code Playgroud)

我想覆盖get_FOO_display(),因为我想复数我的显示.

但是super(A, self).get_unit_display()不起作用.

Dan*_*man 8

通常,您只需覆盖已显示的方法.但这里的诀窍是该get_FOO_display方法不存在于超类中,因此调用该super方法根本不会做任何事情.当元类通过元类添加到模型时,该方法由字段类动态添加 - 请参阅此处的源代码.

您可以做的一件事是为您的unit字段定义一个自定义Field子类,并覆盖contribute_to_class它以便构造您想要的方法.不幸的是,它有点棘手.

(我不明白你的第二个问题.你到底在问什么?)