0

私は Django を学ぼうとしています。今このリンクを読んでいます: https://docs.djangoproject.com/en/1.5/topics/forms/modelforms/

提供されたリンクを下にスクロールすると、フォームの検証には 2 つの主要なステップが含まれ、最初のステップは「フォームの検証」であり、このリンクにつながることが示されています: https://docs.djangoproject.com/en /1.5/ref/forms/validation/#フォームとフィールドの検証

すべての検証の最初のステップは、フィールドで to_python() メソッドを使用することです。彼らが言うとき、私は彼らが何を意味するのか理解できません

「値を正しいデータ型に強制し、それが不可能な場合は ValidationError を発生させます。このメソッドは、ウィジェットから生の値を受け取り、変換された値を返します。」

だから私はこのようなモデルを持っているとします

class User(models.Model):
    user_id = models.AutoField(unique=True, primary_key=True)
    username = models.SlugField(max_length=50, unique=True)
    first_name = models.CharField(max_length=50)

私はそのようなフォームを作成しました

class UserForm(forms.ModelForm):
    class Meta:
        model = User

さて、 to_python() メソッドをどのように正確に使用するのですか? ビューで使用しますか?または、forms.py ファイルで使用する必要がありますか? ビューで使用すると、関数は何と呼ばれますか?

4

2 に答える 2

3

Django はフィールドの入力を自動的に検証し、逆シリアル化します。

フォーム投稿時の表示例:

def my_view(request):
   form = UserForm() 
   if request.method == 'POST':
       form = UserForm(request.POST)

        if form.is_valid(): # here to_python() is run for each field
            form.save()
            # redirect

   return render_to_response('home.html', { 'form': form })
于 2013-09-19T23:09:39.770 に答える
0

カスタム フィールドto_python()を作成する場合を除き、心配する必要はありません。ModelForm を使用して単純なフォームを作成する場合は、clean メソッドを使用できます。

1 つのフィールドのみを検証する場合は、次のようにします。

class UserForm(forms.ModelForm):

    def clean_username(self):
        username = self.cleaned_data['username']
        if len(username) > 10:
            raise forms.ValidationError("Please shorten your username")

        # Always return the cleaned data, whether you have changed it or
        # not.
        return username

複数のフィールドをクリーンアップする場合は、次のようにします。

class Userform(forms.Form):
    # Everything as before.
    ...

    def clean(self):
        cleaned_data = super(UserForm, self).clean()
        username = cleaned_data.get("username")
        first_name = cleaned_data.get("first_name") 

        if len(username) > 10:
            raise forms.ValidationError("Please shorten your username")

        if len(first_name) < 1:
            raise forms.ValidationError("First name is too short")

        # Always return the full collection of cleaned data.
        return cleaned_data
于 2013-09-20T09:22:04.530 に答える