Django Admin:在内联ManyToMany字段中更改显示的列名 [英] Django Admin: change displayed column name in inline ManyToMany field

查看:187
本文介绍了Django Admin:在内联ManyToMany字段中更改显示的列名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试翻译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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆