2016-08-17 21 views
5

Właśnie zbadane mój „błąd” i okazało się, że to nowa funkcja w Django 1.9, która obowiązuje CharFields taśmy domyślnie: https://docs.djangoproject.com/en/1.9/ref/forms/fields/#django.forms.CharField.stripDjango TextField/Charfield jest stripping obowiązuje/puste linie

Te same szwy, aby zastosować do pól tekstowych. Więc dowiedziałem się, dlaczego Django zachowuje się nagle inaczej niż wcześniej, ale czy istnieje prosty sposób przywrócenia poprzedniej wartości domyślnej automatycznych formularzy administracyjnych?

Id nie chce rozdzielać spacji przy użyciu automatycznie generowanego formularza od administratora. Czy to nadal możliwe?

Odpowiedz

2

Wydaje się, że najlepszym sposobem obsługi to jest stworzenie niestandardowego formularza administratora takiego:

class CustomForm(forms.ModelForm): 
    my_field = forms.CharField(strip=False, widget=forms.Textarea) 

    class Meta: 
     model = MyModel 
     exclude = [] 

To stworzy domyślny formularz z tylko my_field nadpisane jego wersji nie pozbawiony.) należy to oczywiście ustawić w odpowiednim administratorze. Jeśli ktokolwiek zna jeszcze prostszą wersję. Powiedz mi, Proszę!

-2

Spróbuj następny:

my_field = models.CharField(max_lenght=255, strip=False) 
+1

jej nie obsługiwane dla pól modelu, tylko pól formularza –

6
strip=False 

w zakresie modelowego CharFields.


Django TextField nie obsługuje tej funkcji usuwania, więc trzeba to zrobić samodzielnie. Możesz użyć metody paska.

abc.strip() 
+2

Zgodnie z docs parametr pas jest ważna tylko dla postaci pole, ale nie pole modelu .. i oczywiście próbowałem: TypeError: __init __() otrzymałem nieoczekiwany argument słowa kluczowego "strip" –

+0

i jak powiedziałem powyżej chcę usunąć funkcję paska, która jest domyślnie począwszy od Django 1.9 - Zasadniczo li ke to, ale dla mojego obecnego projektu chcę mieć spacje NIE rozebrane –

1

Spróbuj użyć tego:

# fields.py 
from django.db.models import TextField 


class NonStrippingTextField(TextField): 
    """A TextField that does not strip whitespace at the beginning/end of 
    it's value. Might be important for markup/code.""" 

    def formfield(self, **kwargs): 
     kwargs['strip'] = False 
     return super(NonStrippingTextField, self).formfield(**kwargs) 

A w modelu:

class MyModel(models.Model): 
    # ... 
    my_field = NonStrippingTextField() 
+0

To fajny pomysł .. sprawdzi, czy następnym razem natknę się na ten problem :) –