У меня есть модель Клиент:
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
Модель клиента связана с моделью Event и CustomerEvent от ForiegnKey.
В панели администратора Django нам нравится отображать customer_name
в раскрывающемся списке с событием, которое работает нормально, поскольку представление объекта Клиент выглядит как 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