我使用 Django 3.0.4 和 Crispy Forms 1.9.0
我有以下模型:
class App(models.Model):
name = models.CharField(max_length=256, db_index=True, verbose_name=_('Name'))
platform = models.ForeignKey(Platform, on_delete=models.CASCADE, verbose_name=_('Platform'))
package_name = models.CharField(max_length=512, unique=True, verbose_name=_('Package name'))
created_at = models.DateTimeField(auto_now_add=True, db_index=True, verbose_name=_('Created Date'))
表格:
class CreateAppForm(forms.ModelForm):
class Meta:
model = App
fields = ('name', 'platform', 'package_name',)
localized_fields = '__all__' # I've tried to enumerate fields as tuple
# labels = { # I've tried to uncomment it
# 'name': _('Name'),
# 'platform': _('Platform'),
# 'package_name': _('Package name'),
# }
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['platform'].queryset = Platform.objects.filter(is_enabled=True)
和模板:
{% extends 'base.html' %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block title %}{% trans "Create application" %}{% endblock %}
{% block page_title %}{% trans "Create application" %}{% endblock %}
{% block content %}
<div class="row">
<div class="col">
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">{% trans "Create application" %}</h6>
</div>
<div class="card-body">
<form class="form" action="{% url 'apps:create' %}" method="post">
{% csrf_token %}
{{ form|crispy }}
<button class="btn btn-success btn-lg" type="submit"><i class="fa fa-check"></i> {% trans "Create" %}</button>
</form>
</div>
</div>
</div>
</div>
{% endblock %}
.po 文件中的所有字符串都已本地化和编译(并且可以在除表单之外的任何地方工作)。
表单呈现正确,但字段的标签未本地化:
出了什么问题?
最佳答案
Django 文档建议使用 gettext_lazy
用于模型字段的详细名称。
This is essential when calls to these functions are located in code paths that are executed at module load time.
This is something that can easily happen when defining models, forms and model forms, because Django implements these such that their fields are actually class-level attributes. For that reason, make sure to use lazy translations in the following cases:
Model fields and relationships
verbose_name
andhelp_text
option values
关于django - 如何正确本地化表单中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60714086/