Django DRY用外键详细命名?

时间:2018-04-04 07:56:55

标签: python django

class ModelA(models.Model):
    class Meta:
        verbose_name = 'my awesome name'

class ModelB(models.Model):
    some_field = models.ForeignKey(ModelA)

有没有办法让some_field的verbose_name成为my awesome name而不明确它? (即使用详细名称相关类作为默认字段详细名称,而不是使用属性名称) 我实际上认为这应该是默认的Django行为。

注意:我使用的是Django 1.11

1 个答案:

答案 0 :(得分:6)

查看源代码,似乎这是在RelatedField类的set_attributes_from_rel方法中实现的:

if self.verbose_name is None:
    self.verbose_name = self.remote_field.model._meta.verbose_name

verbose_name也在Field类的set_attributes_from_name方法中设置:

if self.verbose_name is None and self.name:
    self.verbose_name = self.name.replace('_', ' ')

此方法首先运行,因此当RelatedField类的方法运行时self.verbose_name不再是None。我不清楚为什么首先运行Field类的方法。

注意:我检查了GitHub上的当前源代码,这可能是比您的代码更新的版本,因为ForeignKey没有版本2.0中所需的on_delete参数