我对Forms和ModelForms的工作方式有点困惑,我想在创建表单时根据字段值创建彩色按钮。
{% 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
显然没有我需要的价值。
我的表单基于&#34;交易&#34;模型。我需要以某种方式访问&#34; color&#34;属性来自&#34;类别&#34;模型,看起来像这样:
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)
选择和传递&#34; category.color&#34;的正确方法是什么?到我创造的每个领域?
感谢。
答案 0 :(得分:0)
试试这个:
class Category(models.Model):
color = models.CharField(max_length=10)
def __unicode__(self):
return '%s - %s' % (self.OtherFieldName, self.color)
在select中的方式应该如下所示
<option value='CategoryID'>OtherFieldName_value - color_value</option>
答案 1 :(得分:0)
好吧,我已经找到了修改@ warath-coder答案的方法。我无法访问&#34; _value&#34;财产,如果它是一种方式,所以我必须实施&#34;拆分&#34;过滤并使用它来分割价值我得到并使用&#34;颜色&#34;这个价值的一部分。
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 %}