django学習——ModelForm


ModelForm
  • ModelForm簡単な紹介
  • ModelFormの使用
  • ModelFormの簡単な紹介
    ModelFormとは、ModelをFormにバインドし、Formはフォームを自動的に生成する役割を果たし、Modelにはデータベース・テーブルのすべてのデータ・フィールドが含まれています.Formのみを使用する場合は、各formフィールドを定義し、ModelとFormを組み合わせると、Model Formには次の機能があります.
  • Formのすべての機能
  • Modelフィールドをformフィールド
  • に自動的に変換
    ModelFormの使用
  • 1、forms.pyファイルにArticleFormクラス継承forms.ModelForm
    from django import forms
    from .models import Article
    
    
    class ArticleForm(forms.ModelForm):
        class Meta:
            model = Article
            fields = "__all__"  #   ,   __all__,           
            exclude = None  #      
            #     
            labels = {
           
                'title': '  ',
                'content': '  ',
                'author': '  ',
            }
            help_texts = None  #       
    
            #      
            widgets = None
            from django.forms import widgets as wid
            # widgets = {
           
            #     'content': wid.Textarea()
            # }
    
            #        
            error_messages = {
           
                'title': {
           'required': '      '},
                'content': {
           'required': '      '},
                'author': {
           'required': '      '}
            }
    
        def get_errors(self):
            errors = self.errors.get_json_data()
            new_errors = {
           }
            for key, message_dicts in errors.items():
                messages = []
                for message in message_dicts:
                    messages.append(message['message'])
                new_errors[key] = messages
            return new_errors
    
    
  • を作成する
  • 2、models.pyファイルにArticleモデル
    from django.db import models
    
    
    class Article(models.Model):
        title = models.CharField(max_length=20)
        content = models.TextField()
        author = models.CharField(max_length=10)
        create_time = models.DateTimeField(auto_now=True)
    
        class Meta:
            db_table = 'article'
    
    
  • を作成する
  • 3、views.pyファイルにビュークラスを定義し、getメソッドとpostメソッド
    from django.shortcuts import render
    from django.views import View
    from .forms import ArticleForm
    
    
    class ArticleView(View):
        def get(self, request):
            form = ArticleForm()
            return render(request, 'article.html', {
           'form': form, 'result': ''})
    
        def post(self, request):
            form = ArticleForm(request.POST)
            if form.is_valid():
                title = form.cleaned_data.get('title')
                content = form.cleaned_data.get('content')
                author = form.cleaned_data.get('author')
                print(title, content, author)
                #           
                form.save()
                #    save()     commit=False,           
                # article = form.save(commit=False)
                # article.title = '    ( )'
                # article.save()
                return render(request, 'article.html', {
           'form': form, 'result': 'submit success'})
            else:
                form = ArticleForm(request.POST)
                print(form.get_errors())
                return render(request, 'article.html', {
           'form': form, 'result': 'submit failed'})
    
    
  • を作成します.
  • 4、urls.pyファイルにマッピングされたルーティング
    from django.urls import path
    from . import views
    
    
    urlpatterns = [
        path('article/', views.ArticleView.as_view(), name='article')
    ]
    
    
  • 5、htmlテンプレートファイル
    
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
        <form action="" method="POST">
            <table>
                {
          { form.as_table }}
                <tr>
                    <td>td>
                    <td><input type="submit" value="  ">td>
                tr>
            table>
        form>
        {
          { result }}
    body>
    html>
    
  • を作成する.