5

DjangoのModelFormsaveメソッドとModelインスタンスを直接保存することの違いを理解しようとしています。

個人的には、直接保存する方が直感的で、データが保存されるタイミングがより明確に示されます。さらに、保存する前にインスタンスを変更する必要がある場合は、Djangoのドキュメントで説明されているように、モデルの保存方法を使用する必要があります

では、フォームが検証されたら、違いは何ですか?フォームが複数のモデルまたは他のより複雑なユースケースを使用した場合、違いはありますか?

それが重要な場合は、Djangoバージョン1.4を使用しています。以下は、検証済みのフォームデータを保存する方法を示すコードです。

前もって感謝します!

# models.py
class Project(models.Model):
    project_name = models.CharField(unique=True, null=False, blank=False)

# views.py
def add_project(request):
    if request.method == 'POST':
        project = Project()
        form = ProjectForm(request.POST, instance=project)

        if form.is_valid():
            project.save() ### <-- project.save() vs form.save() ###

            return HttpResponseRedirect(reverse('view_project', args=(project.id,)))
    else:
        form = ProjectForm()

    return render_to_response(
        'add_project.html',
        {
            'form': form,
        },
        context_instance=RequestContext(request)
    )

# forms.py
class ProjectForm(ModelForm):
    class Meta:
        model = Project
4

2 に答える 2

5

あなたが持っているコメント行では、project.save()単に何もしません。インスタンスはフォームデータで更新されていません。2行前に作成した空のインスタンスです。既存のインスタンスを更新する唯一の方法は、そのフォームを保存することです。

于 2013-01-06T18:50:18.460 に答える
2

ModelForm.save()フォームに入力されたデータから保存されたオブジェクトをModel.save()返します。オブジェクトが初期化されたデータまたは作成後に設定された値からオブジェクトを返します。ModelForm.save()したがって、ユーザーがフォームに入力したものから永続化されたオブジェクトにデータを取得する場合は、データを自分で検証し、オブジェクトを初期化してから保存する作業を行うよりも、呼び出す方が理にかなっています。によって処理されますModelForm

于 2013-01-06T21:33:09.080 に答える