如何选择标签的选项使用自定义的名字呢?

时间:2019-02-01 12:53:18

标签: django django-forms django-templates

schema_fld是对象列表,如何在Select标记中显示自定义名称。 我想将值附加到模型的显示字符串。如果显示字符串是“ Apple”,那么我想在用户界面中将其显示为“ Fruit-Apple”。

我不能在模型,因为它是在应用程序的其他部分被用于使用(的 STR )方法。我创建在模型“domval_display”的方法而调用该从HTML是行不通的。

 <table class='no_error'>
        <thead>
            <tr>
                <th>Schema Fields</th>
            </tr>
        </thead>
        <tr>
            <td>
                {% for hidden in form.hidden_fields %} {{ hidden }} {% endfor %} {{ form.schema_fld.errors.as_ul }}{{ form.schema_fld }}
            </td>
        </tr>
        {% endfor %}
</table>


class SchemaFld(models.Model):
    schema_fld_id = models.AutoField(primary_key=True)
    fld_name = models.CharField(max_length=256)
    schema = models.ForeignKey(TSchema, models.DO_NOTHING)

    def domval_display(self):
        return 'Fruit-'+str(self.fld_name)

    def __str__(self):
        return str(str(self.fld_name))


class MappingSetForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
       asset = kwargs.pop('asset', None)
       super(MappingSetForm, self).__init__(*args, **kwargs)
       self.fields['schema_fld'].queryset =self.fields['schema_fld'].queryset.filter(schema_id=asset.src_schema.schema_id)

    class Meta:
        model = MappingSet
        fields = [ 'schema_fld']
        widgets = {
         'updated_by': forms.HiddenInput(),
        }

1 个答案:

答案 0 :(得分:2)

the docs for ModelChoiceField所示,您需要定义一个实现label_from_instance方法的自定义字段,并在您的表单中使用它。

class FruitModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return obj.domval_display()    # or just do the string formatting here


class MappingSetForm(forms.ModelForm):
    schema_fld = forms.FruitModelChoiceField(queryset=SchemaFld.objecst.none())