如何在 select 字段 django admin 中显示不同的列?
How to show different column in select field django admin?
我有一个模特客户:
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 模型通过 ForiegnKey 与 Event 和 CustomerEvent 模型相关联。
在 Django 管理面板中,我们喜欢在带有事件的下拉列表中显示 customer_name
,它工作正常,因为 Customer 对象 str 表示是 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
我有一个模特客户:
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 模型通过 ForiegnKey 与 Event 和 CustomerEvent 模型相关联。
在 Django 管理面板中,我们喜欢在带有事件的下拉列表中显示 customer_name
,它工作正常,因为 Customer 对象 str 表示是 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