Как показать разные колонки в поле 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
Вернуться на верх