Django ModelForm与models.Model之间的区别是什么?

时间:2018-02-06 01:50:07

标签: django django-models

我正在学习Django,但无法理解ModelForm的ans models.Model,谁有人能解释它们之间的区别?谢谢!

1 个答案:

答案 0 :(得分:2)

改编自django docs

ModelForm表单,它与特定模型中定义的字段紧密相关。模型由子类models.Model定义。

Model是有关您数据的信息来源。它包含您要存储的数据的基本字段和行为。通常,每个模型都映射到单个数据库表。当您开发Web应用程序时,您可能会拥有与Django模型紧密相关的表单。因此,Django提供了一个帮助器类,允许您从Django模型创建Form类。这个助手类是ModelForm

您创建的ModelForm将在模板中呈现,以便用户可以创建或更新存储在Model定义的数据库表中的实际数据。

例如,假设您要在Web应用程序中存储有关文章的数据,您首先要定义一个名为Article的模型,如下所示:

在models.py中:

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=30)
    body = models.TextField(max_length=300)

在您的forms.py中,您将创建 modelForm 以与刚刚创建的文章模型对应。

from .models import Article
from django.forms import ModelForm

class ArticleForm(ModelForm):
    class Meta:
        model = Article
        fields = ['title', 'body']

然后在views.py中,您可以渲染文章形式:

from django.shortcuts import render
from django.http import HttpResponseRedirect

from .forms import ArticleForm

def article_form_view(request):
    # if this is a POST request we need to process the form data
    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = ArticleForm(request.POST)
        # check whether it's valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required
            # ...
            # redirect to a new URL:
            return HttpResponseRedirect('/')

    # if a GET (or any other method) we'll create a blank form
    else:
        form = ArticleForm()

    return render(request, 'article_form.html', {'form': form})