2010-01-10 29 views
5

Mam pole w modelu, które chcę, aby użytkownicy czuli się tak, jakby mogli napisać dowolną ilość tekstu. Django zapewnia CharField i TextField w modelach. Zakładam, że różnica polega na tym, że jeden z nich to char (max_length), a drugi to varchar wewnętrznie.Odpowiedniość pola tekstowego Django w modelu

Kusi mnie do korzystania z TextField, ale ponieważ nie szanuje max_length, jestem nieco ostrożny, gdy ktoś wyrzuca do niego mnóstwo danych i DOS-owanie mojego serwera. Jak mam sobie z tym poradzić?

Dzięki!

Odpowiedz

7

Pola w modelu odzwierciedlają tylko sposób przechowywania danych w bazie danych.

Można bardzo łatwo wymusić maksymalną długość w formularzu, który potwierdzi dane wejściowe użytkownika. Lubię to.

class InputForm(forms.Form): 
    text = forms.CharField(max_length=16384, widget=forms.TextArea) 
    ... 

To sprawi, że maksymalna długość użytkownika, którą można wprowadzić z powodzeniem, to 16k.

+0

Szkoda, żałuję, że nie mogę po prostu użyć ModelForm bez modyfikacji reprezentacji. Lubię trzymać magiczne numery w jednym miejscu :-) – SapphireSun

+0

Właściwie nadal możesz używać ModelForm i po prostu dostosować go do tego pola. Zobacz http://docs.djangoproject.com/en/1.1/topics/forms/modelforms/#overriding-the-default-field-types –

+0

Należy powiedzieć widget = forms.Textarea zamiast forms.TextArea. –

Powiązane problemy