2016-05-17 83 views
0

我想在用戶填寫表單後更改數據。不過,我想讓前臺用戶可以輕鬆點擊單選按鈕,但在後臺輸入所需的信息。django - POST後改變表單數據

在這裏,我想獲得一個日期輸入,我想給用戶一個'今天'或'另一天'的選擇。當選擇「TODAY」時,我希望數據庫捕獲該日期的特定日期。我的代碼如下:

#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

它可能是更漂亮,只是有一個'DateField'和一個javascript按鈕(或類似),將設置值到'今天',否則只需將其默認設置爲今天。 – Sayse

回答

0

你不需要改變POST數據。

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() 
     ... 

你可以閱讀更多關於Django表單clean_<field name>更在https://docs.djangoproject.com/en/1.9/ref/forms/validation/

+0

甜美!完全工作。謝謝! –

0

代替使用CharField,請使用DateField並在Today中應用datetime.today()

你的代碼應該是這樣的:

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)