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

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

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

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

Python

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

Q&A

解決済

1回答

2759閲覧

djangoのフォームにModelのレコードを初期値として入れたい

hamakawa

総合スコア2

Django

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

Python

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

0グッド

0クリップ

投稿2020/05/08 07:48

編集2020/05/08 08:00

djangoのフォームにデータベースレコードを初期値として入れたい

djangoで商品注文サイトを作っています。
detailviewで詳細ページに表示させた店舗名などの情報と同じものをフォームの初期値として設定し、メール送信したいと考えています。

しかし、view.py 内でのmodelの扱いがわかっておらずフォームに渡すことができません。detailviewでのモデルの取り扱い、もしくはフォームへの渡し方などをご教示いただければと思います。

よろしくお願いいたします。

■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

name 'shops' is not defined

該当のソースコード

python

1class Order(DetailView, FormView): 2 model = Register 3 template_name = 'order.html' 4 form_class = OrderForm 5 6 def get_context_data(self, **kwargs): 7 context = super().get_context_data(**kwargs) 8 context['form'] = OrderForm(initial={'TestText':shops.name}) 9 return context 10 11 def form_valid(self, form): 12 return render(self.request, 'order_confirm_detail.html', {'form': form}) 13

python

1class OrderForm(forms.Form): 2 """オーダーフォーム""" 3 TestText = forms.CharField( 4 label='テスト', 5 max_length=255, 6 required=False, 7 widget=forms.TextInput(attrs={'placeholder': ''}) 8 ) 9 10 customer_name = forms.CharField( 11 label='お名前', 12 max_length=30, 13 required=True, 14 help_text='必須' 15 ) 16 customer_email = forms.EmailField( 17 label='email', 18 required=True, 19 help_text='必須' 20 ) 21 22 23

python

1from django.urls import path 2 3from . import views 4 5 6app_name = 'bento' 7 8urlpatterns = [ 9 path('thanks/', views.Thanks.as_view(), name='thanks'), 10 path('create/', views.Create.as_view(), name='create'), 11 path('list/', views.ShopList.as_view(), name='list'), 12 path('order/<int:pk>/', views.Order.as_view(), name='order'), 13 path('result/', views.OrderResult.as_view(), name='order_result'), 14 path('order_confirm_detail/<int:pk>/', views.OrderConfirm.as_view(), name='order_confirm'), 15 path('testview/', views.testview, name='testview') 16

python

1class Register(models.Model): 2 """店舗登録モデル""" 3 class Meta: 4 db_table = 'shop' 5 verbose_name_plural = '店舗登録' 6 7 name = models.CharField(verbose_name='店舗名', max_length=50) # 店舗名 8 email = models.EmailField(max_length=256, unique=True) # メールアドレス 9 tel = models.CharField(max_length=14) # 電話番号HPには公開しない 10 address = models.TextField(verbose_name='住所', null=True, blank=True) 11 text = models.TextField(max_length=256) # 店舗紹介文 12 item = models.ImageField(verbose_name='商品画像', upload_to='item_img') # 商品画像 13 shop = models.ImageField(verbose_name='店舗画像', upload_to='shop_img') # 店主画像 14 delivery1 = models.CharField(verbose_name='受け取り1', max_length=12, null=True, blank=True) # 受取1 15 delivery2 = models.CharField(verbose_name='受け取り2', max_length=12, null=True, blank=True) # 受取2 16 delivery3 = models.CharField(verbose_name='受け取り3', max_length=12, null=True, blank=True) # 受取3 17 price = models.IntegerField(default=750, null=True, blank=True) # 価格将来的に利用 18 created = models.DateTimeField(auto_now_add=True) # 登録日 19 saved = models.DateTimeField(auto_now=True) # 更新日 20 21 def __str__(self): 22 return self.name

試したこと

initialをいろいろ変更して試しました。

object.name
type object 'object' has no attribute 'name'

model.object.get()
get() returned more than one Model -- it returned 2!

Model.object.all()
<QuerySet [<Model: name1>, <Model: neme2>]>

補足情報(FW/ツールのバージョンなど)

python3.6
django2.2.1

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

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

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

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

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

ForestSeo

2020/05/08 07:54

urls.pyを見せてください
hamakawa

2020/05/08 07:55

from django.urls import path from . import views app_name = 'bento' urlpatterns = [ path('thanks/', views.Thanks.as_view(), name='thanks'), path('create/', views.Create.as_view(), name='create'), path('list/', views.ShopList.as_view(), name='list'), path('order/<int:pk>/', views.Order.as_view(), name='order'), path('result/', views.OrderResult.as_view(), name='order_result'), path('order_confirm_detail/', views.OrderConfirm.as_view(), name='order_confirm'), path('testview/', views.testview, name='testview') ]
ForestSeo

2020/05/08 07:58

path('order/<int:pk>/', views.Order.as_view(), name='order'), このパラメータのpkは何のモデルのpkでしょうか shopsのmodelがみたいです
hamakawa

2020/05/08 08:04

modelを追記しました。
guest

回答1

0

ベストアンサー

Python

1# views.py 2class Order(DetailView, FormView): 3 model = Register 4 template_name = 'order.html' 5 form_class = OrderForm 6 7 def get_context_data(self, **kwargs): 8 context = super().get_context_data(**kwargs) 9 context['form'] = OrderForm(initial={'TestText':Register.objects.get(pk=self.kwargs.get('pk')).name}) 10 return context 11 12 def form_valid(self, form): 13 return render(self.request, 'order_confirm_detail.html', {'form': form})

こんな感じでしょうか

投稿2020/05/08 08:07

編集2020/05/08 08:12
ForestSeo

総合スコア2720

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

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

hamakawa

2020/05/08 08:11

解決いたしました。誠にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問