前提・実現したいこと
django初心者です。
クラスベースビューのCreateViewで複数チェックボックスの値を受け取りたいです。
調べたところpostメソッドでオーバーライドする書き方があり、それを参考にしたのですが、
仕様によりform_validメソッドで書きたいのですが上手くいきません。
・models.py
python
1class Company(models.Model): 2 name = models.CharField(verbose_name=u'会社名',max_length=50, blank=True, null=True) 3 address = models.CharField(verbose_name=u'ご住所',max_length=100, blank=True, null=True) 4 email = models.CharField(verbose_name=u'メールアドレス',max_length=50, blank=True, null=True) 5 tel = models.CharField(verbose_name=u'電話番号',max_length=50, blank=True, null=True) 6 service_ids = models.CharField(max_length=50, blank=True, null=True) 7 8 class Meta: 9 verbose_name_plural = '企業情報' 10 11 def __str__(self): 12 return self.name 13 14class Service(models.Model): 15 id = models.AutoField(db_column='ServiceID', primary_key=True) 16 service_name = models.CharField(db_column='ServiceName', max_length=20, blank=True, null=True) 17 18 class Meta: 19 managed = False 20 db_table = 'Service' 21 22 def __str__(self): 23 return self.service_name
・forms.py
python
1from .models import Company,Service 2class CompanyForm(forms.ModelForm): 3 4 service_ids = forms.MultipleChoiceField( 5 label='サービス設定', 6 required=False, 7 disabled=False, 8 initial=[], 9 choices=[(i.id, i.service_name) for i in Service.objects.all()], 10 widget=forms.CheckboxSelectMultiple 11 ) 12 13 class Meta: 14 model = Company 15 fields =('name','address','email',tel','service_ids') 16 17 def __init__(self, *args, **kwargs): 18 super().__init__(*args, **kwargs) 19 for field in self.fields.values(): 20 field.widget.attrs['class'] = 'form-control'
・view.py
python
1class CompanyCreateView(generic.CreateView): 2 model = Company 3 template_name = 'create.html' 4 form_class = CompanyForm 5 6 def form_valid(self,form): 7 company= form.save(commit = False) 8 service_values = request.POST.getlist('service')←ココの書き方がわかりません 9 company.service_ids = strlist_to_string(service_values) ←別の場所で処理します。(ex:'1,2,4'など) 10 company.save() 11 messages.success(self.request,'登録が完了しました') 12 return super().form_valid(form) 13 14 def form_invalid(self,form): 15 messages.error(self.request,'エラーです。') 16 return super().form_invalid(form) 17 18 def get_success_url(self): 19 return reverse('appname:company_detail',kwargs ={'pk':self.object.id})
発生している問題・エラーメッセージ
name 'request' is not defined
試したこと
views.pyで
service_values = request.POST.getlist('service')
↓
service_values = self.request.POST.getlist('service')
に書き換えてみましたが、以下のエラーが出ます。
name 'post' is not defined
説明不足の点などがあればご指摘ください。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
django=2.2
pyhton=3.8
mysql=14.14 Distrib 5.7.31
回答1件
あなたの回答
tips
プレビュー