Reputation: 110502
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.
Upvotes: 1
Views: 1384
Reputation: 2538
In one line inside the init method of your Form :
self.fields['position'].label_from_instance = lambda obj: f"{obj.position_select}"
Upvotes: 0
Reputation: 110502
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',)
Upvotes: 3
Reputation: 5919
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.
Upvotes: 1