Как использовать собственные имена в опциях выбора тега? - PullRequest
0 голосов
/ 01 февраля 2019

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 голосов
/ 01 февраля 2019

Как показывают документы для 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())
...