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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Django

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

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2834閲覧

ImportError: cannot import name 'FindForm' from 'hello.forms' のエラーが解決できません。

MillionMan

総合スコア11

Django

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

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/17 07:08

編集2021/01/17 11:43

python(Django)を学習しているのですが、まだ初級レベルのため下記エラーについて解決ができず、わかる方がいらっしゃいましたらご教示願います。
コード自体は間違っていないようなので、ディレクトリかファイルか何かのエラーでしょうか。

ターミナル

File "C:\Users\toshi\django_app\hello\urls.py", line 8, in <module> from . import views File "C:\Users\toshi\django_app\hello\views.py", line 6, in <module> from .forms import FindForm ImportError: cannot import name 'FindForm' from 'hello.forms' (C:\Users\toshi\django_app\hello\forms.py)

urls.py

urls.py

1from django.urls import path 2from . import views 3 4urlpatterns = [ 5 path('', views.index, name='index'), 6 path('create', views.create, name='create'), 7 path('edit/<int:num>', views.edit, name='edit'), 8 path('delete/<int:num>', views.delete, name='delete'), 9 path('find', views.find, name='find'),

views.py

from django.shortcuts import render from django.http import HttpResponse from django.shortcuts import redirect from .models import Friend from .forms import FriendForm from .forms import FindForm def index(request): data = Friend.objects.all() params = { 'title': 'Hello', 'data': data, } return render(request, 'hello/index.html', params) def create(request): if (request.method == 'POST'): obj = Friend() friend = FriendForm(request.POST, instance=obj) friend.save() return redirect(to='/hello') params = { 'title': 'Hello', 'form': FriendForm(), } return render(request, 'hello/create.html', params) def edit(request, num): obj = Friend.objects.get(id=num) if (request.method == 'POST'): friend = FriendForm(request.POST, instance=obj) friend.save() return redirect(to='/hello') params = { 'title': 'Hello', 'id': num, 'form': FriendForm(instance=obj), } return render(request, 'hello/edit.html', params) def delete(request, num): friend = Friend.objects.get(id=num) if (request.method == 'POST'): friend.delete() return redirect(to='/hello') params = { 'title': 'Hello', 'id': num, 'obj': friend, } return render(request, 'hello/delete.html', params) def find(request): if (request.method == 'POST'): msg = 'search result:' form = FindForm(request.POST) str = request.POST['find'] data = Friend.objects.filter(name__contains=str) else: msg = 'search words...' form = FindForm() data = Friend.objects.all() params = { 'title': 'Hello', 'message': msg, 'form': form, 'data': data, } return render(request, 'hello/find.html', params)

追記です。
モジュールのディレクトリ構造ですが、以下の通りとなります。
こういう感じで大丈夫でしょうか。

├─django_app │ │ asgi.py │ │ settings.py │ │ urls.py │ │ wsgi.py │ │ __init__.py │ │ │ └─__pycache__ │ settings.cpython-38.pyc │ urls.cpython-38.pyc │ wsgi.cpython-38.pyc │ __init__.cpython-38.pyc │ └─hello │ admin.py │ apps.py │ forms.py │ models.py │ tests.py │ urls.py │ views.py │ __init__.py │ ├─migrations │ │ 0001_initial.py │ │ __init__.py │ │ │ └─__pycache__ │ 0001_initial.cpython-38.pyc │ __init__.cpython-38.pyc │ ├─static │ └─hello │ └─css │ style.css │ ├─templates │ └─hello │ create.html │ delete.html │ edit.html │ find.html │ index.html │ └─__pycache__ admin.cpython-38.pyc forms.cpython-38.pyc models.cpython-38.pyc urls.cpython-38.pyc views.cpython-38.pyc __init__.cpython-38.pyc

尚、実行したコマンドは、サーバーに接続したときになります。
python manage.py runserver
この後にエラーが発生しました。

追記2:
更に追記ですみません。
forms.pyのコードは以下のようになります。
やはりクラスの間違いか何かでしょうか。

from django import forms from.models import Friend class FriendForm(forms.ModelForm): class Meta: model = Friend fields = ['name','mail','gender','age','birthday'] class FindForm(forms.Form): find = forms.CharField(label='Find', required=False)

すみませんがよろしくお願い致します。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Surpris

2021/01/17 07:26

差支えなければ、`hello` モジュールのディレクトリ構造と、エラーが生じた実行コマンドをご質問の本文に掲載していただければ、解決策が見つかりやすくなると思います。 モジュールのディレクトリ構造については、例えば次のような感じでしょうか: ``` hello/ __init__.py forms.py models.py urls.py views.py ``` エラーが出た実行コマンドは以下でしょうか。それとも別のコマンドでしょうか。 ``` python views.py ```
MillionMan

2021/01/17 08:38

早速のご回答ありがとうございます。 追記で記載しましたがこちらで大丈夫でしょうか。 すみませんがよろしくお願い致します。
Surpris

2021/01/17 08:57

早速のご対応ありがとうございます。 manage.py はルートディレクトリにある(つまり`django_app` ディレクトリと同じ階層にある)という理解でよろしいでしょうか。
Surpris

2021/01/17 09:37

手元で同じようなディレクトリ構造にして `python manage.py runserver` を実行してみましたが、特にエラーが出ませんでした。 `forms.py` のうち `FriendForm` はインポートできて `FindForm` がインポートできないというのも何か変ですね。 `FindForm` が `forms.py` 内にない、もしくはクラス名が間違っている、というようなミスのように見えますが、いかがでしょうか。
ppaul

2021/01/17 09:39

大文字小文字を区別して、forms.pyの中でFindFormが定義されているかどうか確認して下さい。
MillionMan

2021/01/17 11:45

ご回答ありがとうございます。 forms.pyにつきましてコードを掲載しました。 やはりクラスの間違いか何かでしょうか。 >manage.py はルートディレクトリにある(つまり`django_app` ディレクトリと同じ階層にある)という理解でよろしいでしょうか。 はい、同じ階層にあります。
guest

回答1

0

ベストアンサー

意図した動作になるかは分かりませんが、少なくとも現在生じているエラーの原因が分かりました。
FindForm クラスのインデントがおかしいですね。
次のように FindForm クラスおよびそれの中身に相当するコードのインデントを FriendForm と同じにすれば、今生じているエラーが解消されると思います。

from django import forms from.models import Friend class FriendForm(forms.ModelForm): class Meta: model = Friend fields = ['name','mail','gender','age','birthday'] class FindForm(forms.Form): find = forms.CharField(label='Find', required=False)

投稿2021/01/17 11:49

Surpris

総合スコア106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MillionMan

2021/01/17 12:38

インデントを修正しましたら、しっかりと表示されるようになりました。 本当にありがとうございます!! インデントが原因とは思いもつきませんでした。 もっとしっかりと勉強するようにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問