前提・実現したいこと
Django,python3でWEBシステムを開発しています。
すでに、CreateViewで作成しているフォームを、そのまま同じものとして、FormViewで使用したいのですが、このような方法は可能でしょうか?
(CreateViewで作成しているフォームで取得したデータを、データベースに保存するのではなく、メールで送信するために利用したいと思っています)
下記のmodelクラスと、formクラスを基にFormViewを作成したいと思っています。
FormViewで使用するフィールドは、
- unit
- start_date
- memo
なのですが、
start_dateには、DatePickerInputを使っているため、そこの変更でつまづいています。
該当のソースコード
models.py
python
1from accounts.models import CustomUser 2from django.db import models 3 4 5class DbInfo(models.Model): 6 7 UNIT_LIST = [ 8 ('㎡', '㎡'), ('a', 'a'), ('ha', 'ha'), ('反', '反'), ('丁', '丁'), ('坪', '坪') 9 ] 10 11 12 user = models.ForeignKey(CustomUser, verbose_name='ユーザー', on_delete=models.PROTECT) 13 unit = models.CharField(verbose_name='単位', max_length=40, blank=True, null=True, 14 choices=UNIT_LIST) 15 start_date = models.DateField(verbose_name='測定日', ) 16 memo = models.TextField(verbose_name='メモ', blank=True, null=True) 17 created_at = models.DateTimeField(verbose_name='登録日時', auto_now_add=True) 18 updated_at = models.DateTimeField(verbose_name='更新日時', auto_now=True) 19 20 class Meta: 21 verbose_name_plural = 'DbInfo'
forms.py
python
1class ResisterForm(forms.ModelForm): 2 class Meta: 3 today = datetime.date.today() 4 model = DbInfo 5 fields = ('unit','start_date', 'memo') 6 widgets = { 7 'start_date': DatePickerInput( 8 format='%Y-%m-%d', 9 options={ 10 'locale': 'ja', 11 'dayViewHeaderFormat': 'YYYY年 MMMM', 12 'minDate': (today - datetime.timedelta(days=1095)).strftime('%Y/%m/%d %H:%M:%S'), 13 'maxDate': (today + datetime.timedelta(days=7)).strftime('%Y/%m/%d %H:%M:%S'), 14 } 15 ), 16 17 } 18 19 def __init__(self, *args, **kwargs): 20 super().__init__(*args, **kwargs) 21 for field in self.fields.values(): 22 field.widget.attrs['class'] = 'form-control' 23 self.fields['unit'].widget.attrs['onchange'] = 'myfunc()'
FormViewのテンプレート
html
1 {{ form.non_field_errors }} 2 3 {% for field in form %} 4 <label for="{{ field.id_for_label }}" class="control-label col-md-4 col-sm-4 "> 5 {{ field.label_tag }} 6 </label> 7 <div class="col-md-8 col-sm-8 "> 8 {{ field }} 9 {{ field.errors }} 10 </div> 11 12 {% endfor %}
補足情報(FW/ツールのバージョンなど)
●開発環境
- Python: 3.7.5
- Django: 2.2.2
回答1件
あなたの回答
tips
プレビュー