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
回答1件
あなたの回答
tips
プレビュー