Django Admin:在内联ManyToMany字段中更改显示的列名 [英] Django Admin: change displayed column name in inline ManyToMany field
问题描述
我尝试翻译Django Admin网站,并且 ManyToMany
TabularInline
有问题。我的 models.py
是:
I try to translate Django Admin site and I have a problem with ManyToMany
TabularInline
. My models.py
are:
class Doctor(models.Model):
(...)
specializations = models.ManyToManyField(Specialization, blank=True, verbose_name='Specjalizacje')
class Meta:
verbose_name = 'Lekarz'
verbose_name_plural = 'Lekarze'
class Specialization(models.Model):
name = models.CharField(max_length=191, verbose_name='Nazwa')
class Meta:
verbose_name = 'Specjalizacja'
verbose_name_plural = 'Specjalizacje'
我的 admin.py
看起来像:
class SpecializationInline(admin.TabularInline):
model = Doctor.specializations.through
verbose_name = 'Specjalizacja'
verbose_name_plural = 'Specjalizacja'
@admin.register(Specialization)
class SpecializationAdmin(admin.ModelAdmin):
list_display = ['name',]
@admin.register(Doctor)
class DoctorAdmin(admin.ModelAdmin):
inlines = [SpecializationInline,]
# this field is added as inline
exclude = ['specializations',]
最终的Django管理页面如下:
The resulting Django Admin Page looks like:
除专业化列外,所有内容均已翻译。
Everything is translated except of the 'Specialization' column. How can I change its name?
推荐答案
好的,这不是一个完整的解决方案。但我希望这可以帮助您。
在 TabularInline
, admin / edit_inline / tabular.html
调用的模板中。
Oke, this is not a full solution. But I hope this helps you out.
In the template that is called by TabularInline
,admin/edit_inline/tabular.html
.
构建表的页眉部分的部分
The part that builds your 'header' part of the table
<thead><tr>
...
{% for field in inline_admin_formset.fields %}
{% if not field.widget.is_hidden %}
<th{% if field.required %} class="required"{% endif %}>
{{ field.label|capfirst }}
...
</th>
{% endif %}
{% endfor %}
...
</tr></thead>
这是告诉我您可以在字段中添加标签。因此,通过创建自定义表单
This is telling me you could add a label to a field. So by creating a custom form
class SpecializationForm(ModelForm):
specializations = forms.ModelChoiceField(queryset=Specialization.objects.all(), label='Specjalizacja')
class Meta:
model = Specialization
fields = ('specializations', )
并在您的 SpecializationInline
class SpecializationInline(admin.TabularInline):
model = Doctor.specializations.through
verbose_name = 'Specjalizacja'
verbose_name_plural = 'Specjalizacja'
form = SpecializationForm
这应允许您更改文本。
这篇关于Django Admin:在内联ManyToMany字段中更改显示的列名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!