You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django多语言项目使用django-modeltranslation实现单视图多语言输入

解决方案

1. 普通自定义视图使用表单

直接使用django-modeltranslation自带的TranslationModelForm类即可自动生成所有语言版本的输入字段,无需手动逐个定义字段:

# forms.py
from modeltranslation.forms import TranslationModelForm
from .models import RentalType, Costs

class RentalTypeForm(TranslationModelForm):
    class Meta:
        model = RentalType
        # 仅填写原始字段名,框架会自动生成所有语种的对应字段
        fields = ['type', 'slug']

class CostsForm(TranslationModelForm):
    class Meta:
        model = Costs
        fields = ['name']

视图层使用方式和普通Django Form完全一致,模板渲染时直接输出表单:

<!-- 模板文件 -->
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">保存</button>
</form>

渲染后会自动生成name_en、name_fr、name_nl三个对应不同语言的输入框。如果需要自定义排版,也可以手动调用每个翻译字段:

<div class="form-item">
    <label>费用名称(英文)</label>
    {{ form.name_en }}
</div>
<div class="form-item">
    <label>费用名称(法语)</label>
    {{ form.name_fr }}
</div>
<div class="form-item">
    <label>费用名称(荷兰语)</label>
    {{ form.name_nl }}
</div>

2. Django Admin后台配置

如果需要在Django自带的Admin后台展示多语言输入框,使用自带的TranslationAdmin类即可:

# admin.py
from modeltranslation.admin import TranslationAdmin
from django.contrib import admin
from .models import RentalType, Costs

@admin.register(RentalType)
class RentalTypeAdmin(TranslationAdmin):
    pass

@admin.register(Costs)
class CostsAdmin(TranslationAdmin):
    pass

效果验证

表单提交后所有语言版本的内容会自动保存到对应数据库字段,前端展示时无需额外处理,直接调用原始字段名即可,框架会自动根据当前访问客户端的语言设置返回对应语种的内容,完全匹配预期的实现效果。

内容的提问来源于stack exchange,提问作者Alexander Schillemans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:27:00