Пожалуйста, посмотрите на эту проблему:
Как использовать ModelForm с django-translation-fields?
Есть ли у вас какое-либо решение?
Короче говоря, я пытаюсь преобразовать Speedy Net из django-modeltranslation
в django-translated-fields
.Я определил модели и формы, и все работает на английском языке, но на другом языке (иврите) у меня проблема в том, что поля формы определяются на английском языке, а не на иврите (текущий язык).Что я сделал не так и как мне определить форму для работы на текущем языке?(поля, определенные TranslatedField в модели, должны быть видны только с текущим языком в форме SpeedyMatchProfileActivationForm).
Я хочу уточнить, что требуемое определение не такое, как указано выше.Желаемое определение - использовать текущий язык в форме, а не всегда английский.Использование английского языка, когда текущий язык не является английским, является ошибкой.
Вы можете увидеть код здесь:
дерево
формы.py
models.py
В настоящее время проблема заключается в классе SpeedyMatchProfileActivationForm
(определенном в forms.py ).Я думаю, что это в основном потому, что класс определен до того, как get_language()
возвращает что-либоНо когда класс был определен с помощью django-modeltranslation
(например, в ветви staging ), он работал.
Кстати, одна из причин, по которой я хочу перейти на django-translated-fields
, заключается в том, чтопотому что он определяет только 2 (количество языков) поля в базе данных, а django-modeltranslation
определяет 3 поля - одно из них (основное поле без языка) кажется мне не обязательным вообще.Взгляните на: Удалите оригинальное поле языка при миграции
class SpeedyMatchProfileActivationForm
определено сейчас (с django-translated-fields
, ссылкой ):
class SpeedyMatchProfileActivationForm(forms.ModelForm):
validators = {
'height': [speedy_match_accounts_validators.validate_height],
'smoking_status': [speedy_match_accounts_validators.validate_smoking_status],
'marital_status': [speedy_match_accounts_validators.validate_marital_status],
to_attribute(name='profile_description'): [speedy_match_accounts_validators.validate_profile_description],
to_attribute(name='city'): [speedy_match_accounts_validators.validate_city],
to_attribute(name='children'): [speedy_match_accounts_validators.validate_children],
to_attribute(name='more_children'): [speedy_match_accounts_validators.validate_more_children],
to_attribute(name='match_description'): [speedy_match_accounts_validators.validate_match_description],
'gender_to_match': [speedy_match_accounts_validators.validate_gender_to_match],
'min_age_match': [speedy_match_accounts_validators.validate_min_age_match],
'max_age_match': [speedy_match_accounts_validators.validate_max_age_match],
'diet_match': [speedy_match_accounts_validators.validate_diet_match],
'smoking_status_match': [speedy_match_accounts_validators.validate_smoking_status_match],
'marital_status_match': [speedy_match_accounts_validators.validate_marital_status_match],
}
diet = forms.ChoiceField(choices=User.DIET_VALID_CHOICES, widget=forms.RadioSelect(), label=_('My diet'), validators=[speedy_match_accounts_validators.validate_diet])
photo = forms.ImageField(required=False, widget=CustomPhotoWidget, label=_('Add profile picture'))
class Meta:
model = SpeedyMatchSiteProfile
fields = ('photo', to_attribute(name='profile_description'), to_attribute(name='city'), 'height', to_attribute(name='children'), to_attribute(name='more_children'), 'diet', 'smoking_status', 'marital_status', 'gender_to_match', to_attribute(name='match_description'), 'min_age_match', 'max_age_match', 'diet_match', 'smoking_status_match', 'marital_status_match')
widgets = {
'smoking_status': forms.RadioSelect(),
'marital_status': forms.RadioSelect(),
to_attribute(name='profile_description'): forms.Textarea(attrs={'rows': 3, 'cols': 25}),
to_attribute(name='city'): forms.TextInput(),
to_attribute(name='children'): forms.TextInput(),
to_attribute(name='more_children'): forms.TextInput(),
to_attribute(name='match_description'): forms.Textarea(attrs={'rows': 3, 'cols': 25}),
'diet_match': CustomJsonWidget(choices=User.DIET_VALID_CHOICES),
'smoking_status_match': CustomJsonWidget(choices=SpeedyMatchSiteProfile.SMOKING_STATUS_VALID_CHOICES),
'marital_status_match': CustomJsonWidget(choices=SpeedyMatchSiteProfile.MARITAL_STATUS_VALID_CHOICES),
}
Ранее было определено (с django-modeltranslation
, ссылкой ):
class SpeedyMatchProfileActivationForm(TranslationModelForm):
validators = {
'height': [speedy_match_accounts_validators.validate_height],
'min_age_match': [speedy_match_accounts_validators.validate_min_age_match],
'max_age_match': [speedy_match_accounts_validators.validate_max_age_match],
'smoking_status': [speedy_match_accounts_validators.validate_smoking_status],
'city': [speedy_match_accounts_validators.validate_city],
'marital_status': [speedy_match_accounts_validators.validate_marital_status],
'children': [speedy_match_accounts_validators.validate_children],
'more_children': [speedy_match_accounts_validators.validate_more_children],
'profile_description': [speedy_match_accounts_validators.validate_profile_description],
'match_description': [speedy_match_accounts_validators.validate_match_description],
'gender_to_match': [speedy_match_accounts_validators.validate_gender_to_match],
'diet_match': [speedy_match_accounts_validators.validate_diet_match],
'smoking_status_match': [speedy_match_accounts_validators.validate_smoking_status_match],
'marital_status_match': [speedy_match_accounts_validators.validate_marital_status_match],
}
diet = forms.ChoiceField(choices=User.DIET_VALID_CHOICES, widget=forms.RadioSelect(), label=_('My diet'), validators=[speedy_match_accounts_validators.validate_diet])
photo = forms.ImageField(required=False, widget=CustomPhotoWidget, label=_('Add profile picture'))
class Meta:
model = SpeedyMatchSiteProfile
fields = ('photo', 'profile_description', 'city', 'height', 'children', 'more_children', 'diet', 'smoking_status', 'marital_status', 'gender_to_match', 'match_description', 'min_age_match', 'max_age_match', 'diet_match', 'smoking_status_match', 'marital_status_match')
widgets = {
'profile_description': forms.Textarea(attrs={'rows': 3, 'cols': 25}),
'children': forms.TextInput(),
'more_children': forms.TextInput(),
'smoking_status': forms.RadioSelect(),
'marital_status': forms.RadioSelect(),
'match_description': forms.Textarea(attrs={'rows': 3, 'cols': 25}),
'diet_match': CustomJsonWidget(choices=User.DIET_VALID_CHOICES),
'smoking_status_match': CustomJsonWidget(choices=SpeedyMatchSiteProfile.SMOKING_STATUS_VALID_CHOICES),
'marital_status_match': CustomJsonWidget(choices=SpeedyMatchSiteProfile.MARITAL_STATUS_VALID_CHOICES),
}
Спасибо!