Как изменить отображение видимого значения в форме 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',)
Вернуться на верх