Как изменить отображение видимого значения в форме django?
У меня есть модель Django из внешней библиотеки python:
class Item(models.Model):
name = models.CharField(...)
serial = models.CharField(...)
def __str__(self):
return str(self.name)
...
Я не могу изменить эту модель, но я хочу отобразить на моей форме виджет со значением как "Item Name (Item Serial)"
Моя форма очень проста:
# forms.py
class InventoryForm(forms.ModelForm):
class Meta:
model = Inventory
fields = ('title', 'item',)
# models.py
class Inventory(models.Model):
title = models.CharField(...)
item = models.ForeignKey(to='Item'...)
...
Можно ли изменить отображение видимого значения?
ModelChoiceField
, поле формы, используемое для выбора модели, поддерживает переопределение label_from_instance
(см. документацию по ссылке).
Итак, подклассифицируем поле выбора с помощью этого...
class ItemChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return f"{obj.name} ({obj.serial})"
... и подключите его к вашей форме:
# forms.py
class InventoryForm(forms.ModelForm):
item = ItemChoiceField(queryset=Item.objects.all())
class Meta:
model = Inventory
fields = ('title', 'item',)