如何引用django模型表单对象的基础模型?

时间:2009-08-31 05:28:17

标签: django django-forms

创建表单时,我希望在模型上使用一个字段作为标签,以便与我正在更新的另一个字段一起使用。

我用一个新的___init____方法覆盖了BaseModelFormSet,如下所示:

class BaseMyFormSet(BaseModelFormSet):
    def __init__(self, *args, **kwargs):
       super(BaseMyFormSet, self).__init__(*args, **kwargs)
    for form in self.forms:
           form.fields['value'].label = ???

如何引用模型中的其他字段,以便将其用作标签值?

(或者,如果有更好的方式以我需要的方式覆盖标签,那将非常有用。)

感谢。

2 个答案:

答案 0 :(得分:1)

我对您的目标并不完全清楚,您是否尝试将字段的值用于模型的特定实例,或者您只是尝试使用模型字段自己的名称或模型定义中的help_text属性?

我猜你想做后者。如果是这样,您可以在 init 方法中访问此类型号信息:

for form in self.forms:
    opts = self.model._meta
    field = opts.get_field("yourfield")
    form.fields['value'].label = field.name

或者

form.fields['value'].label = field.help_text

答案 1 :(得分:1)

我发布了这个问题,因为我有一个包含两个字段的模型:

LabelField
ValueField

我希望显示一个使用“LabelField”作为标签的表单,同时允许用户更新“ValueField”。我的第一个想法是以某种方式将“LabelField”的值分配给“ValueField”的label属性。

我最终做的是将“LabelField”的“禁用”属性设置为true:

form.fields['labelfield'].widget.attrs['disabled'] = True

这允许我在不让用户更新它的情况下显示“labelfield”。我可以想到至少另外两种方法来实现同样的目标,但鉴于我对Django等人的熟悉程度,这就是我现在所使用的。