Django-Countries:翻译选择中的排序错误(但在管理员中有效)

时间:2014-09-02 14:38:14

标签: django django-views

我使用Django Countries,如下所示。在我看来,似乎根据英语原始值排序选择项目(例如Deutschland将在G(=德国)下找到)但在管理员中,值根据当前语言排序。这不是由JavaScript完成的(我通过禁用JS来尝试)。我不知道如何解决这个问题。版本:Django 1.5.5,Django国家2.1.2

models.py

from django_countries.fields import CountryField
class MyModel(ModelSubClass):
    country = CountryField(_('country'), blank=True)
    #...

class MyForm(ModelSubForm):
    class Meta(object):
        model = MyModel
        #...

    def __init__(self, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    self.fields['country'].required = True
    #...

views.py

class MyCreateView(CreateView):
    model = MyModel
    form_class = MyForm
    # overriding `dispatch`, `get_initial`, `form_valid`, `get_context_data`, `get_success_url`

my_template.html

{% extends "base.html" %}
{% load i18n %}
{% block content %}
<form class="form-horizontal" role="form" method="post" action="">
{% csrf_token %}
{{ form }}
<button type="submit" class="btn btn-success">{% trans 'Submit' %}</button>
</form>
{# ... #}
{% endblock content %}

如果需要,我可以提供更多信息。

另一件事是管理员在非ASCII大写字母的国家/地区排序是错误的。但我认为这是another issue

2 个答案:

答案 0 :(得分:1)

使用MyForm的{​​{1}}:

中的原始内容覆盖选项
__init__

使用选项中的第一项保留空值(from django_countries import countries class MyForm(ModelSubForm): class Meta(object): model = MyModel #... def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) self.fields['country'].choices = [self.fields['country'].choices[0]] + list(countries) #... )。

据我所知,问题是models.py中字段的---------是在服务器启动时加载的,即一次。在表单中,您可以根据请求覆盖它。排序由choices(同一文件中的countries的实例)完成。

我愿意接受更好的解决方案。

答案 1 :(得分:0)

here之前已经同样问过问题。

答案是:

function sort(a, b) {               
        return (a.innerHTML > b.innerHTML) ? 1 : -1;
    };
$('#select_id option').sort(sort).appendTo('#select_id');