2012-08-26 18 views
1

我有一個窗體(TypedMultipleChoiceField加CheckboxSelectMultiple部件)的製造商列表。Django形式:我想'特別'裏等:)

其中一些是建議(有Manufaturers模型和is_recommended字段)。我想給他們特別的課。

所以我得到了什麼:

<ul> 
    <li>Just Audi</li> 
    <li>Recommended BMW</li> 
    <li>Just Skoda</li> 
</ul> 

我想要什麼:

<ul> 
    <li>Just Audi</li> 
    <li class='recommended'>Recommended BMW</li> 
    <li>Just Skoda</li> 
</ul> 

我怎樣才能將類添加到特殊裏?

+0

現在我正在玩小部件 - 但在渲染過程中,我看不到item.is_recommended(它是從模型中獲取的) –

+0

您可以在頁面中呈現JavaScript代碼以將此類添加到選項:http:// forum。 jquery.com/topic/jquery-select-option-add-class – danihp

回答

3

您可以通過模板上的表單字段環......

<ul> 
{% for field in form %} 
    {% for option in field.field.choices.queryset %} 
     <li {% if option.is_recommended %}class="recommended"{% endif %}> 
     {{ option.title }} 
     </li> 
    {% endfor %} 
{% endfor %} 
</ul> 
0

您應該創建自己的自定義小部件(從CheckBoxSelectMultiple繼承),以使您的特殊項目具有天賦。

在你的特殊的小部件,覆蓋render方法 - 我沒有測試過,但這樣的事情:

def render(self, name, value, attrs=None): 
    if value is None: 
     value = '' 
    final_attrs = self.build_attrs(attrs, type=self.input_type, name=name) 
    # enter your condition here 
    # if Foo.objects.get(name=name).is_recommended: 
    # final_attrs['class'] = 'recommended' 
    if value != '': 
     # Only add the 'value' attribute if a value is non-empty. 
     final_attrs['value'] = force_unicode(self._format_value(value)) 
    return mark_safe(u'<input%s />' % self.flatatt(final_attrs)) 
+0

的問題是我在widget中只有unicode - 我需要檢查模型字段是否爲True - 然後應用該類。似乎我需要創建一個字段 - 不只是一個部件 –