Django Python演算結果をデータベースにレコードする方法

実現したいこと

Django勉強中です。
formに年月日とその日の出来事を入力し、年月日の入力値をpython datetimeのモジュールで演算し、曜日を取得 return。手入力した年月日と出来事と、取得した曜日をデータベースにレコードしたい。

発生している問題・分からないこと

上記実現したいことは、実現できているのですが、以下に記載する手法は、自分で考えたやり方で、なんとなくぎこちなく感じます(演算取得値をforms.HiddenInputのデフォルト値とする方法)。基本的なことですので、一般的でもっとスマートなやり方があると思いますので教えて下さい。

該当のソースコード

Python

1models.py 2class DateEvent(models.Model):3 owner = models.ForeignKey(User, on_delete=models.CASCADE,4 related_name='dateevent_owner')5 date = models.CharField(max_length=20)6 event = models.CharField(max_length=50)7 weekday = models.CharField(max_length=20)8 pub_date = models.DateTimeField(auto_now=True)9 10 def __str__(self):11 return str(self.date) + ' (' +str(self.event) + \ 12 '): ' + str(self.weekday)13 14 class Meta:15 ordering = ('-date',)

Python

1forms.py 2class PostForm(forms.Form): 3 # 年月日4  dt = forms.CharField(label="Date",5 widget=forms.TextInput(attrs={'class': 'form-control'}))6 #その日の出来事event7 evt = forms.CharField(label="Event",8 widget=forms.TextInput(attrs={'class': 'form-control'}))9 # 曜日は非表示にする(即ち手入力できない)10 wd = forms.CharField(label="Weekday",11 widget=forms.HiddenInput(attrs={'class': 'form-control'}))12 13 def __init__(self, user, *args, **kwargs):14 super(PostForm, self).__init__(*args, **kwargs)15 16 self.fields["dt"].widget.attrs["placeholder"] = "Input date as yyyy/mm/dd"17 self.fields["dt"].widget.attrs["class"] = "form-control"18 self.fields["evt"].widget.attrs["placeholder"] = "Input event on the date."19 self.fields["evt"].widget.attrs["class"] = "form-control"

Python

1views.py 2@login_required(login_url='/admin/login/')3def wkday_create(request):4 template = 'wkday_sub/wkday_create.html'5 context = {6 'form': PostForm(request.user),7 'login_user': request.user, 8 }9 if request.method == 'POST':10 input_date = request.POST['dt']11   # 曜日演算のpythonプログラム weekday_valが曜日return値12 weekday_val = wdg.weekday_search(input_date=input_date) 13 de = DateEvent()14 de.owner = request.user 15 de.date = input_date 16 de.event = request.POST['evt']17 ""wdのformはHiddenにしてあり入力されていないので、 18 weekday_valをdefault値として、request.Get.getでアクセス(POSTではできなかった)。 19 何かもう少し上手いやり方あると思うが、とりあえずこれで成功。""" 20 de.weekday = request.GET.get('wd', weekday_val)21 de.save()22 23 return render(request, template, context)

試したこと・調べたこと

上記の詳細・結果

私の持つDjango入門書には上記のようなケースの直接やり方は記載されておらず、色々ググりましたが、基本的すぎるせいか、直接のやり方は見当たらず。結局入門書のPaginationのページを入力しない場合のデフォルトページのやり方や、Qiitaやteratailのmodelのデフォルト値設定の仕方を真似応用しています。

補足

特になし

コメントを投稿

0 コメント