2016-05-17 22 views
0

ユーザーがフォームをいっぱいにした後にデータを変更しようとしています。しかし、前向きのユーザーがラジオボタンをクリックするのは簡単ですが、バックエンドでは必要な情報を入力してください。django - POST後にフォームデータを変更する

ここでは、ユーザーに「今日」または「別の日」のいずれかを選択したい日付入力を取得しようとしています。 「今日」が選択されている場合、その特定の日の日付をデータベースに取り込むようにします。次のように私のコードは次のとおりです。

#models.py 
DATE_CHOICES = (
    ('Today', 'Today'), 
    ('Other days', 'Other days'), 
) 

class Mileage(models.Model): 
     date = models.CharField(max_length=30, choices= DATE_CHOICES) 

     def __str__(self):    # __unicode__ on Python 2 
      return self.date 

    class MileageForm(ModelForm): 
     date = forms.ChoiceField(choices=DATE_CHOICES, widget=forms.RadioSelect) 

     class Meta: 
      model = Mileage 
      fields = ['date'] 

#views.py 
def home(request): 
form = MileageForm(request.POST or None) 

context = { 
     "form": form, 
    } 

if form.is_valid(): 
    if form.cleaned_data.get('date') == "Today": 
     form.cleaned_data["date"]= time.strftime("%d/%m/%Y") 
    form.save() 
    form = MileageForm() 
    context = { 
     "form": form, 
    } 

return render(request, 'home.html', context) 

私は入力がPOSTですぐに捕獲され、この場合の「今日は」が定義されて選択肢だったされていることを理解しています。 「今日」の変更をデータベースに保存するときに実際の日付自体に変更する方法はありますか?

+0

でDjangoのフォームclean_<field name>より多くの詳細を読むことができる値を設定します'today'に設定します。それ以外の場合は、デフォルトをtodayに設定します。 – Sayse

答えて

0

Djangoは、入力データ(通常はPOST)をとり、cleanメカニズムを使用してPythonデータに変換することで作業します。各フィールドを個別にクリーニングするためのフックがあります。

あなたのフォームのclean_dateメソッドは'Today'date.today()に変換できます。例:

class MileageForm(ModelForm): 
    def clean_date(self): 
     user_input = self.cleaned_data.get('date') 
     if user_input == 'Today': 
      return date.today() 
     ... 

あなたはおそらくちょうど `DateField`とJavaScriptボタン(または類似)を持つことが非常に良くなりhttps://docs.djangoproject.com/en/1.9/ref/forms/validation/

+0

甘い!完全に動作します。ありがとう! –

0

CharFieldを使用する代わりに、今日のケースではDateFieldを使用してdatetime.today()を適用してください。

のようにあなたのコードが見えるはずです:あなたはPOSTデータを変更する必要はありません

models.py 
DATE_CHOICES = (
    ('Today', 'Today'), 
    ('Other days', 'Other days'), 
) 

class Mileage(models.Model): 
     date = models.DateField('Date') 

     def __str__(self):    # __unicode__ on Python 2 
      return self.date 

    class MileageForm(ModelForm): 
     date = forms.DateField() 

     class Meta: 
      model = Mileage 
      fields = ['date'] 

views.py 
from datetime import datetime 


def home(request): 
form = MileageForm(request.POST or None) 

context = { 
     "form": form, 
    } 

if form.is_valid(): 
    if form.cleaned_data.get('date') == "Today": 
     form.cleaned_data["date"]= datetime.today() 
    form.save() 
    form = MileageForm() 
    context = { 
     "form": form, 
    } 

return render(request, 'home.html', context) 
関連する問題