質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Python 3.x

    6835questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Django

    1114questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

《python3、django2》formで作成した入力画面が動かない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 252

chercher

score 1

 質問事項

初歩的な質問です。
python3、django2でアプリケーション作成中にformで画面が遷移せず。
エラーは出ていません。htmlで送信ボタンを作成して押しているのですが、反応しません。
プロジェクト名book、アプリケーション名recommendです。
以下が作成したファイルです。
updateとaddの両方出ます。adminサイトではできます。

どなたかご教授お願い致します。

 book/urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('recommend.urls'))
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 recommend/urls.py

from django.urls import path
from . import views

app_name = 'recommend'

urlpatterns =[
    path('', views.IndexView.as_view(), name='index'),
    path('add/', views.AddView.as_view(), name='add'),
    path('update/<int:pk>', views.UpdateView.as_view(), name='update'),
    path('detail/<int:pk>', views.DetailView.as_view(), name='detail'),
]

 models.py

from django.db import models
from django.utils import timezone



class Genre(models.Model):
    name = models.CharField('ジャンル名', max_length=30)
    created_at = models.DateTimeField('日付', default=timezone.now)

    def __str__(self):
        return self.name


class Relation(models.Model):
    name = models.CharField('ジャンル名', max_length=30)
    created_at = models.DateTimeField('日付', default=timezone.now)

    def __str__(self):
        return self.name


class Book(models.Model):
    title = models.CharField('タイトル', max_length=50)
    author = models.CharField('著者', max_length=50)
    text = models.TextField('簡単な説明')
    genre = models.ForeignKey(Genre, verbose_name='ジャンル', on_delete=models.PROTECT, blank=True)
    relation = models.ManyToManyField(Relation, verbose_name='関連項目', blank=True)
    thumbnails = models.ImageField('画像', upload_to='thumbnails/', null=True, blank=True)
    created_at = models.DateTimeField('日付', default=timezone.now)

    def __str__(self):
        return self.title

 views.py

from django.views import generic
from django.urls import reverse_lazy
from .models import Book
from .forms import BookRecommendForm

class IndexView(generic.ListView):
    model = Book
    paginate_by = 10

class AddView(generic.CreateView):
    model = Book
    form_class = BookRecommendForm
    success_url = reverse_lazy('recommend:index')

class UpdateView(generic.UpdateView):
    model = Book
    form_class = BookRecommendForm
    success_url = reverse_lazy('recommend:index')

class DetailView(generic.DetailView):
    model = Book

 forms.py

from django import forms
from .models import Book


class BookRecommendForm(forms.ModelForm):

    class Meta:
        model = Book
        fields = '__all__'

 book_form.html

{% extends 'recommend/base.html'%}


{% block content %}

<form action="" method="POST" enctype="multipart/form-data" class="mt-5">
<table class="table">
    <tr>
        <th>タイトル</th>
        <td>{{form.title}}</td>
    </tr>
    <tr>
        <th>著者</th>
        <td>{{form.author}}</td>
    </tr>
    <tr>
        <th>簡単な説明</th>
        <td>{{form.text}}</td>
    </tr>
    <tr>
        <th>ジャンル</th>
        <td>{{form.genre}}</td>
    </tr>
    <tr>
        <th>関連項目</th>
        <td>{{form.relation}}</td>
    </tr>
    <tr>
        <th>画像</th>
        <td>{{form.thumbnails}}</td>
    </tr>
</table>
    <p>一度登録すると削除はできません。</p>
{% csrf_token%}
<button type="submit" class="btn btn-primary">送信</button>
</form>

{% endblock %}

 

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

解決しました。
models.pyのクラスで指定したフィールド(7つ)が、forms.py内でもallと指定しているので
book_form.htmlのフォームも7つじゃないといけないのに、6つでした。
created_at = models.DateTimeField('日付', default=timezone.now)
に該当する入力フォームを追加したら解決できました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

book_form.htmlの<form action="" ... のactionにurlがないからではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    6835questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Django

    1114questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。