将外键值传递给Django中的Choice

时间:2015-01-04 23:26:38

标签: python django

我对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;的正确方法是什么?到我创造的每个领域?

感谢。

2 个答案:

答案 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 %}