2015-01-04 53 views
0

對於Forms和ModelForms的工作方式我有點困惑,我想在創建表單時基於字段值創建彩色按鈕。將外鍵值傳遞給Django中的Choice

{% for category in form.category %} 
<label class="colored-icon btn btn-default btn-sm" style="background-color: {{ category.color }}"> 
    {{ category.choice_label|slice:"1" }} 
    {{ category.tag }} 
</label> 
{% endfor %} 

問題是,category.color顯然沒有我需要的價值。

我的表單基於「交易」模型。我需要以某種方式訪問​​從 「類別」 的模式,它看起來像這樣的 「顏色」 屬性:

forms.py

class TransactionForm(forms.ModelForm): 
    class Meta: 
     model = Transaction 

models.py

class Transaction(models.Model): 
    category = models.ForeignKey(Category, default='Unspecified') 

class Category(models.Model): 
    color = models.CharField(max_length=10) 

views.py

def index(request): 
    form = TransactionForm(request.POST) 
    new_transaction = form.save() 
    context = { 
     'form': form, 
    } 

return render(request, 'index.html', context) 

有什麼正確的方法來選擇並傳遞「category.color」給每個我正在創建的字段?

謝謝。

+0

你如何保存'Transcation'對象?你能否顯示你的views.py? – torm

+0

@torm,我添加了我的views.py文件內容 – iijaachok

+0

你在哪裏渲染模板(從你的問題的頂部)? – torm

回答

0

試試這個:

class Category(models.Model): 
    color = models.CharField(max_length=10) 

    def __unicode__(self): 
     return '%s - %s' % (self.OtherFieldName, self.color) 

內選擇這種方式應該是這樣的

<option value='CategoryID'>OtherFieldName_value - color_value</option> 
+0

謝謝,它確實看起來像這樣,但我不知道如何通過此顏色爲此選擇添加顏色值。 – iijaachok

0

好吧,我想出了一個辦法這樣做改良@ warath編碼器的答案。如果它是一種方法,我無法訪問「_value」屬性,所以我必須實現「分割」過濾器,並使用它來分割我已獲取的值並使用此值的「顏色」部分。

models.py

class Category(models.Model): 
    color = models.CharField(max_length=10) 

    def __unicode__(self): 
     return '%s - %s' % (self.OtherFieldName, self.color) 

split_filter.py

@register.filter(name='split') 
def split(value, arg): 
    return value.split(arg) 

index.html

{% with category.choice_label|split:"-" as label %} 
<label class="btn btn-default btn-sm" style="background-color: {{ label.1 }}"> 
    {{ label.0 }} 
    {{ category.tag }} 
</label> 
{% endwith %}