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

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

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

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

Python

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

Q&A

解決済

1回答

1419閲覧

(Django)TypeError __init__() takes 1 positional argument but 2 were givenを解決したい

minari766

総合スコア17

Django

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

Python

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

0グッド

0クリップ

投稿2021/11/01 11:16

###発生したエラーおよび実現したいこと
Djangoで作成したCRUD系アプリにて、新規記事作成ボタンを押したところ、下記の通りTypeErrorが発生するようになりました。

python

1#エラーメッセージ 2TypeError at /post/new/ 3__init__() takes 1 positional argument but 2 were given 4Exception Location: /app/app/views.py in get, line 109 5 6 7#Traceback対象箇所 8 107. class CreatePostView(LoginRequiredMixin, View): 9 108. def get(self, request, *args, **kwargs): 10 109. form = PostForm(request.POST or None)11 110. return render(request, 'app/post_form.html', { 12 111. 'form': form 13 112. })

上記エラーメッセージで調べると、ほとんどが__init__(self)の設定し忘れと出るのですが、その様な箇所があるわけでもなく、行き詰まってしまっております。
何かお気づきの点があればご指摘頂きたく、お願い致します。

###各種コード
関係すると思われている箇所を記述いたします。不足等あればご指摘ください。
view.py

python

1class CreatePostView(LoginRequiredMixin, View): 2 def get(self, request, *args, **kwargs): 3 #下記がエラーメッセージの該当箇所です。 4 form = PostForm(request.POST or None) 5 return render(request, 'app/post_form.html', { 6 'form': form 7 }) 8 9 def post(self, request, *args, **kwargs): 10 form = PostForm(request.POST or None) 11 12 if form.is_valid(): 13 post_data = Post() 14 post_data.author = request.user 15 post_data.title = form.cleaned_data['title'] 16 area = form.cleaned_data['area'] 17 post_data.area = get_object_or_404(Area, name=area) 18 attraction = form.cleaned_data['attraction'] 19 post_data.attraction = get_object_or_404(Attraction, name=attraction) 20 category = form.cleaned_data['category'] 21 post_data.category = get_object_or_404(Category, name=category) 22 post_data.content = form.cleaned_data['content'] 23 if request.FILES: 24 post_data.image = request.FILES.get('image') 25 post_data.save() 26 return render(request, 'app/post_preview.html', { 27 'post_data' : post_data 28 }) 29 30 return render(request, 'app/post_form.html', { 31 'form': form 32 })

forms.py

python

1class PostForm(forms.Form): 2 def __init__(self, *args, **kwargs): 3 title = forms.CharField(max_length=50, label='タイトル') 4 area = forms.ModelChoiceField(queryset=Area.objects.all(), label='エリア', widget=forms.Select, initial="----選択してください") 5 attraction = forms.ModelChoiceField(queryset=Attraction.objects.all(), label='アトラクション', widget=forms.Select, initial="----エリアを選択してください") 6 category = forms.ModelChoiceField(queryset=Category.objects.all(), label='カテゴリ', widget=forms.Select, initial="----選択してください") 7 content = forms.CharField(label='内容', widget=forms.Textarea()) 8 image = forms.ImageField(label='イメージ画像', required=False)

models.py

python

1class Post(models.Model): 2 author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 3 area = models.ForeignKey(Area, verbose_name='エリア', on_delete=models.CASCADE) 4 attraction = models.ForeignKey(Attraction, verbose_name='アトラクション', on_delete=models.CASCADE) 5 category = models.ForeignKey(Category, verbose_name='カテゴリ', on_delete=models.CASCADE) 6 title = models.CharField("タイトル", max_length=200) 7 image = models.ImageField(upload_to='images', verbose_name='Image画像', null=True, blank=True) 8 content = models.TextField("本文") 9 created = models.DateTimeField("作成日", default=timezone.now) 10 public = models.BooleanField("公開フラグ", default=False) 11 12 def __str__(self): 13 return str(self.title)

###開発環境
・Visual Studio Code 1.59
・mac OS Catalina 10.15.7
・Github
・Python 3.8.3
・Django 2.2.10
・PostgreSQL

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

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

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

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

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

guest

回答1

0

ベストアンサー

def getは初期画面の表示でrequestは渡さないので以下だと思います。
× form = PostForm(request.POST or None)
〇 form = PostForm()

エラーメッセージは109行目となっていますが上の修正でエラーが無くならなければ
form = PostForm(request.POST or None)を
form = PostForm(request.POST)に変えて実行してもらえますか?

forms.pyでは全て入力必須となっているのでform.is_validではNoneはありえないはずです。
なのでNoneの設定は必要ないかと思いますが。。

投稿2021/11/02 15:10

akane_emo

総合スコア30

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

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

minari766

2021/11/04 15:28

ご指摘の方法で解決いたしました! 有難うございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問