Powłoka Django zachowuje się (przynajmniej dla mnie) nieoczekiwanie podczas pracy z ustawieniami narodowymi. Formularz sprawdzania poprawności pola dziesiętnego oddzielonego przecinkami działa podczas wywoływania ze skryptu zewnętrznego i kończy się niepowodzeniem podczas wywoływania z powłoki django (ipython).Python django powłoki (ipython) nieoczekiwane zachowanie lub błąd?
Rozpoczynanie nowego projektu mam następujące pliki:
local_forms/
├── local_forms
│ ├── __init__.py
│ ├── models.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── my_form.py
├── test_form.py
local_forms/models.py:
from django.db import models
class MyModel(models.Model):
val=models.DecimalField("value",max_digits=11,decimal_places=2)
my_form.py
from django import forms
from django.conf import settings
from local_forms.models import MyModel
class MyForm(forms.ModelForm):
val = forms.DecimalField(localize=True)
def __init__(self,*args,**kwargs):
super(MyForm,self).__init__(*args,**kwargs)
self.fields['val'].localize=True
if __debug__:
print self.fields['val'].localize
print ("Separator: "+settings.DECIMAL_SEPARATOR)
print ("Language: " +settings.LANGUAGE_CODE)
class Meta:
model=MyModel
test_form.py:
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "local_forms.settings")
import my_form
form=my_form.MyForm({'val':'0,2'})
print ("Is bound: %s" % form.is_bound)
print ("Form valid %s" % form.is_valid())
print("Errors in val: %s" % form['val'].errors)
Wywoływanie ./test_form.py plony:
./test_form.py
True
Separator: .
Language: de-de
Is bound: True
Form valid True
Errors in val:
robi to samo w Django skorupy: python manage.py shell
In [1]: import my_form as mf
In [2]: form=mf.MyForm({'val':'0,2'})
True
Separator: .
Language: de-de
In [3]: form.is_valid()
Out[3]: False
In [4]: form['val'].errors
Out[4]: [u'Enter a number.']
Podsumowując: jeśli zacznę powłokę django (który na moim komputerze używa ipython) locale jakoś nie działa. Zrobienie tego samego w scenariuszu działa doskonale. Czy możesz wyjaśnić to zachowanie?
Testowałem to za pomocą tłumacza bpython i otrzymałem ten sam błąd. Może niektóre ustawienia nie zostaną zaimportowane lub ścieżka nie zostanie załadowana. –