django-multilingual: раскрывающееся поле заказа по переведенному полю - PullRequest
2 голосов
/ 26 января 2010

как заказать варианты поля формы по переведенному полю?

models.py:

class UserProfile(models.Model):
    ...
    country=models.ForeignKey('Country')

class Country(models.Model):
    class Translation(multilingual.Translation):
        name = models.CharField(max_length=60)
    ...

template.html:

{# userprofileform is a standard modelform for UserProfile #}
{{ userprofileform.country }}

спасибо

редактирование:

Я хочу, чтобы параметры поля select были упорядочены по name_de или name_en в зависимости от языка:

<!-- English -->
<select>
    <option>Afganistan</option>
    <option>Austria</option>
    <option>Bahamas</option>
</select>

<!-- German (as it is) -->
<select>
    <option>Afganistan</option>
    <option>Österreich</option>
    <option>Bahamas</option>
</select>

<!-- German (as it should be) -->
<select>
    <option>Afganistan</option>
    <option>Bahamaas</option>
    <option>Österreich</option>
</select>

Ответы [ 3 ]

1 голос
/ 25 апреля 2012

Вы можете попробовать использовать пользовательский виджет в форме, чтобы сортировка происходила непосредственно перед тем, как django сделает перевод Может быть, этот фрагмент из моего текущего проекта может помочь

import locale
from django_countries.countries import COUNTRIES
from django.forms import Select, Form, ChoiceField

class CountryWidget(Select):

    def render_options(self, *args, **kwargs):
        # this is the meat, the choices list is sorted depending on the forced 
        # translation of the full country name. self.choices (i.e. COUNTRIES) 
        # looks like this [('DE':_("Germany")),('AT', _("Austria")), ..]
        # sorting in-place might be not the best idea but it works fine for me
        self.choices.sort(cmp=lambda e1, e2: locale.strcoll(unicode(e1[1]),
           unicode(e2[1])))
        return super(CountryWidget, self).render_options(*args, **kwargs)

class AddressForm(Form):
    sender_country = ChoiceField(COUNTRIES, widget=CountryWidget, initial='DE')
1 голос
/ 11 мая 2017

Я решил похожую проблему, загружая значения выбора динамически. Совсем не чувствовал себя грязным.

Пример получения значений из модели страны с полем имени, содержащим название страны. Используя ту же логику, вы можете получить свои значения из любого места.

from django.utils.translation import ugettext_lazy as _
from mysite.Models import Country

class UserProfileForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(UserProfileForm, self).__init__(*args, **kwargs)
        self.fields['country'].queryset = Country.objects.order_by(_('name'))

    class Meta:
        model = Country
0 голосов
/ 26 января 2010

У меня нет реального опыта работы с i18n, поэтому я не знаю, что вам доступно на бэкэнде, но вы можете использовать javascript для сортировки меню в браузере

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...