1

I have the following field in a django form:

position = forms.ModelChoiceField(Position.objects.order_by('-ordering'),
                                    empty_label='Select Position',)

In my Position model, I am using the unicode field to display the field called "position". However, in this particular form, I want the output to be a different field in the model called "position-select". How would I do this without altering the default output of the unicode field?

Thank you.

David542
  • 104,438
  • 178
  • 489
  • 842
  • Are you trying to display the "position" field with the __unicode__ description from "position-select"? – imm Oct 02 '11 at 21:31

3 Answers3

3

This is what worked:

class PositionSelect(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return obj.select_display

class Position(forms.Form):
    position = PositionSelect(Position.objects.order_by('-ordering'),
                                    empty_label='Select Position',)
David542
  • 104,438
  • 178
  • 489
  • 842
1

Try "subclassing ModelChoiceField and override label_from_instance", per the example at https://docs.djangoproject.com/en/dev/ref/forms/fields/#modelchoicefield. You could specify a reference to the __unicode__ function of your other field within that overridden class.

imm
  • 5,837
  • 1
  • 26
  • 32
0

In one line inside the init method of your Form :

self.fields['position'].label_from_instance = lambda obj: f"{obj.position_select}"

Lucas B
  • 2,183
  • 1
  • 22
  • 22