Как показать разные колонки в поле select в админке django?
У меня есть модель Клиента:
class Customer(models.Model):
customer_name = models.CharField(max_length=128, null=True)
contact_name = models.CharField(max_length=64)
def __str__(self) -> str:
return self.customer_name
Модель Customer связана с Event и CustomerEvent моделью ForiegnKey.
В Django Admin панели мы хотим показать customer_name в выпадающем списке с Event, который работает нормально, так как Customer объектное строковое представление self.customer_name.
Но в CustomerEvent мы хотели бы показать contact_name в выпадающем списке панели администратора, который не находится в __str__ представлении.
Вот мой пример кода:
def render_change_form(self, request, context, *args, **kwargs):
context['adminform'].form.fields['customer'].queryset = Customer.objects.filter(customer_type__iexact='I')
return super(CustomerEventAdmin, self).render_change_form(request, context, *args, **kwargs)
Пожалуйста, дайте мне какую-нибудь идею, чтобы сделать это.
Я получил ответ:
Я просто переопределил метод formfield_for_foreignkey и теперь он выглядит так:
def formfield_for_foreignkey(self, db_field, request, **kwargs):
formfield = super().formfield_for_foreignkey(db_field, request, **kwargs)
if db_field.name == 'customer':
formfield.label_from_instance = lambda obj: obj.contact_name
return formfield