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

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

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

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

Python

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

Q&A

解決済

1回答

1527閲覧

CreateViewのform_validが通らないのはなぜか。

coke

総合スコア17

Django

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

Python

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

0グッド

0クリップ

投稿2020/01/13 13:46

こんにちは。現在商品投稿フォームを作成しています。
ログイン時のみ商品投稿できるという仕様です。
そのさい、CreateViewを継承し作成しているのですが、form_validメソッドが通りません。
それはPOSTリクエストではthumbの値が取れているのに、form.cleaned_dataでは空になっているからです。
ほんとに意味不明です。マジで意味わかりません。
ちなみに管理画面からだとレコードは作成されます。
なぜrequest.POST['thumb']では値がとれるのにform.clean_data['thumb']ではNoneになるんでしょうか?
教えてくださいお願いします!
画面

python

1#view 2class OnlyYouMixin(UserPassesTestMixin): 3 raise_exception = True 4 5 def test_func(self): 6 user = self.request.user 7 return user.pk == self.kwargs['pk'] or user.is_superuser 8 9class ProductPost(OnlyYouMixin, generic.CreateView): 10 """ 商品をポスト """ 11 model = Product 12 form_class = ProductForm 13 template_name = 'register/product_post.html' 14 15 def form_valid(self, form): 16 product = form.save(commit=False) 17 user = User.objects.get(pk=self.kwargs['pk']) 18 product.user = user 19 product.save() 20 return redirect('register:top') 21

python

1#model 2class Product(models.Model): 3 thumb = models.ImageField(upload_to='products/') 4 title = models.CharField(max_length=50) 5 price = models.IntegerField() 6 description = MarkdownxField('本文', help_text='Markdown形式で書いてください。') 7 user = models.ForeignKey(User, on_delete=models.CASCADE) 8 published_date = models.DateTimeField(default=timezone.now())

python

1#forms 2class ProductForm(forms.ModelForm): 3 """ 商品をポスト """ 4 5 def __init__(self, *args, **kwargs): 6 super().__init__(*args, **kwargs) 7 for field in self.fields.values(): 8 field.widget.attrs['class'] = 'form-control' 9 field.widget.attrs['placeholder'] = field.label 10 11 class Meta: 12 model = Product 13 fields = ('thumb', 'title', 'price', 'description') 14 widgets = { 15 'description': MarkdownxWidget(attrs={'id': 'description'}), 16 } 17 labels = { 18 'thumb': '商品サムネイル用', 19 'title': '商品名', 20 'price': '値段', 21 'description': '商品に関する説明', 22 }

html

1{% extends "register/base.html" %} 2{% block content %} 3{% load static %} 4<section id="product" class="container my-5"> 5 <div class="row"> 6 <div class="col-md-12"> 7 <h2>商品登録</h2> 8 <p>出品したい商品を登録・変更します。</p> 9 <form action="" method="POST"> 10 {{ form.non_field_errors }} 11 {% for field in form %} 12 <div class="form-group"> 13 {{ field }} 14 {{ field.errors }} 15 </div> 16 {% endfor %} 17 {% csrf_token %} 18 <button id="#submit" type="submit" class="btn btn-1 w-50 mx-auto btn-lg btn-block">送信</button> 19 </form> 20 </div> 21 </div> 22</section> 23<script> 24 // simpleMDEリアルタイム反映 25 (function($) { 26 $(window).on("load", function() { 27 var mde = new SimpleMDE({ 28 element: document.getElementById("description"), 29 forceSync: true 30 }); 31 }); 32 }(jQuery)); 33</script> 34{% endblock %}

python

1#settings 2MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 3MEDIA_URL = '/media/'

python

1#urls(プロジェクトの) 2urlpatterns = [ 3 path('admin/', admin.site.urls), 4 path('', include('register.urls')), 5 path('markdownx/', include('markdownx.urls')), 6] 7urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

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

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

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

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

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

guest

回答1

0

自己解決

回答できないあほばかりなのでもういいです。

投稿2020/01/15 13:02

coke

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問