Django:在子模型中覆盖字段标签或帮助文本

5 投票
2 回答
3250 浏览
提问于 2025-04-17 10:37

我有几个模型,它们都有一些共同的功能。每个模型代表一种实际库存的商品,所以它们共享一些东西,比如 stock(库存),还有一些像低库存警告事件(发送邮件)这样的功能。

为了避免重复代码,我写了一个抽象模型,然后从这个模型继承。

class LowStockModel(models.Model):
    stock = stock = models.IntegerField()
    out_of_stock_behaviour = models.CharField(max_length=20, choices=[...])

    class Meta:
        abstract = True

    def save(self, *args, **kwargs):
        super(self.__class__, self).save(*args, **kwargs)
        if self.stock <= 0:
            #...

现在我遇到的问题是,我需要在我创建的子类中更改 stock 字段的标签,或者添加不同的 help_text(帮助文本)。这非常重要,因为客户和他们的员工需要关于单位的说明。我尝试在子类的 __init__ 方法中进行修改,但没有成功。

总结一下:我该如何在子模型中更改字段的标签?

2 个回答

0

这个应该可以用:

class MyForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['stock '].label = "any label"
5

当你从一个抽象类继承时,在Django中你可能想要使用:

CustomClass._meta.get_field('yourfield').verbose_name = '你的自定义文本'

你的类应该像这样:

class AncestorClass(models.Model):
    stock = models.CharField(max_length=50, verbose_name='AncestorStockName')
    # etc ...

现在我们应该这样自定义子类:

class ChildClass(AncestorClass):
     stock = models.CharField... # Customize your stock field

ChildClass._meta.get_field('stock').verbose_name = 'CustomVerboseStock'

撰写回答