2009-08-31 78 views
3

創建表單時,我希望將模型上的一個字段用作標籤,以便與正在更新的另一個字段一起使用。如何引用django模型表單對象的基礎模型?

我已經覆蓋了BaseModelFormSet用新___init____方法,像這樣:

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

我如何引用其他領域的模型,這樣我可以用它作爲標籤的價值?

(或者,如果有一個更好的方式來覆蓋在我需要的方式,標籤,那將是非常有幫助。)

感謝。

回答

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 
+0

(對不起,對於遲到的回覆,我在過去一個星期不在) 它實際上是前者。在上例中,我需要將「yourfield」的實際值作爲名爲「value」的字段的標籤。所以,像(重新命名變量爲清晰): namefield = opts.get_field(「namefield」) form.fields ['quantityfield']。label = namefield.value 我會盡量擺弄,使用樣品你給我看看我能否弄清楚。 謝謝 – 2009-09-12 04:43:34

1

我張貼了這個問題,因爲我有兩個領域的典範:

LabelField 
ValueField 

我想顯示一個使用「LabelField」作爲標籤的表單,同時允許用戶更新「ValueField」。我的第一個想法是以某種方式將「LabelField」的值分配到「ValueField」的標籤屬性中。

我最終什麼事做的卻是設置「的LabelField」的「禁用」屬性設置爲true:

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

這讓我沒有讓用戶更新顯示「的labelField」。我可以考慮至少有兩種其他的方式來實現這個目標,但鑑於我對Django等人的熟悉程度,我現在正在使用這個方法。

+0

這是行不通的。 「禁用」屬性阻止對基礎模型的更新。 – 2009-09-15 07:22:11

+0

這是同樣的問題,在這個線程中討論: http://stackoverflow.com/questions/1105507/make-a-foreign-key-field-in-a-django-form-read-only-and-仍然啓用-的形式對 – 2009-09-16 19:17:51