rob*_*s85 38 django django-admin
如何在选择字段为ForeignKey时更改select中的显示文本?我不仅需要显示FK的名称,还需要显示它的父名称.
任何人都可以提供线索?
Bot*_*res 53
好吧,如果你想让它只在admin中生效,而不是全局生成,那么你可以创建一个自定义ModelChoiceField子类,在自定义中使用它ModelForm,然后设置相关的管理类来使用你的自定义表单.举例说明,对于Person@Enrique使用的模型有FK :
class Invoice(models.Model):
person = models.ForeignKey(Person)
....
class InvoiceAdmin(admin.ModelAdmin):
form = MyInvoiceAdminForm
class MyInvoiceAdminForm(forms.ModelForm):
person = CustomModelChoiceField(queryset=Person.objects.all())
class Meta:
model = Invoice
class CustomModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "%s %s" % (obj.first_name, obj.last_name)
Run Code Online (Sandbox Code Playgroud)
ale*_*nia 49
另一种方法(在更改查询集时很有用):
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['user'].queryset = User.objects.all()
self.fields['user'].label_from_instance = lambda obj: "%s %s" % (obj.last_name, obj.first_name)
Run Code Online (Sandbox Code Playgroud)
'user'是您要覆盖的字段的名称.此解决方案为您提供了一个优势:您也可以覆盖查询集(例如,您想要User.objects.filter(username__startswith ='a'))
免责声明:在http://markmail.org/message/t6lp7iqnpzvlt6qp上找到并经过测试的解决方案.
Lu.*_*mec 13
较新版本的django支持此功能,可以使用gettext进行翻译:
models.ForeignKey(ForeignStufg, verbose_name='your text')
Run Code Online (Sandbox Code Playgroud)
Enr*_*tín 10
请参阅https://docs.djangoproject.com/en/1.3/ref/models/instances/#unicode
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
Run Code Online (Sandbox Code Playgroud)
你必须定义你想在模型的unicode方法中显示的内容(ForeignKey在哪里).
问候,
您也可以admin.ModelAdmin使用实例直接完成此操作label_from_instance。例如:
class InvoiceAdmin(admin.ModelAdmin):
list_display = ['person', 'id']
def get_form(self, request, obj=None, **kwargs):
form = super(InvoiceAdmin, self).get_form(request, obj, **kwargs)
form.base_fields['person'].label_from_instance = lambda obj: "{} {}".format(obj.id, obj.first_name)
return form
admin.site.register(Invoice, InvoiceAdmin)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31760 次 |
| 最近记录: |