2017-11-14 27 views
1

フォームに入力された日付が現在の日付より前である場合は、ifステートメントでチェックしようとしています。その場合は、モデル内のオブジェクトに書き込みます。私はまた、これを行うより良い方法があるかどうかもわかりません。フォームの日付フィールドと現在の日付との比較

は、私はこのエラーを取得

'<' not supported between instances of 'DateField' and 'datetime.date' 

マイビュー:

class ActionCreateView(LoginRequiredMixin, generic.CreateView): 
    login_url = '/scrty/login/' 
    template_name = "nodiso/actioncreate.html" 
    form_class = forms.LeadActionCreateForm 
    # success_url = reverse_lazy('nodisoapp:leaddetail', kwargs['pk']) 

    def get_success_url(self, **kwargs): 
    return reverse("nodisoapp:leaddetail", kwargs={'pk': 
    self.kwargs['pk']}) 

    def form_valid(self, form): 
    if form.fields['Duedate'] < datetime.date.today(): 
     self.object.overdue = 1 
    else: 
     pass 
    self.object = form.save(commit=False) 
    self.object.lead_id = self.kwargs['pk'] 
    self.object.creator = self.request.user.firstname 
    self.object.save() 
    return super(ActionCreateView, self).form_valid(form) 

モデル:

class LeadActions(models.Model): 
    lead = models.ForeignKey(Leads) 
    name = models.CharField(max_length=265) 
    crdate = models.DateField(auto_now_add=True) 
    Duedate = models.DateField() 
    creator = models.CharField(max_length=265) 
    overdue = models.IntegerField(null=True,blank=True) 

    def __str__(self): 
    return self.name 

形式:

class LeadActionCreateForm(forms.ModelForm): 
    class Meta: 
     model = models.LeadActions 
     fields = ['name','Duedate'] 
+1

が、それは私にこのエラーを与えるには、 'NoneType' オブジェクトは、「[ 'Duedate' – Hennie

+0

用事そして、申し訳ありません –

+0

試し印刷form.fields 'への属性を持っていません'Duedate'] 'これは' form.fields ['Duedate']だと思います。date

答えて

1

すでにこちらのフォームから保存されていないモデルを引き出しているので:

self.object = form.save(commit=False) 

なぜモデルインスタンスから直接Duedateを読んでいないし、それに応じてoverdueフラグを設定しますか?

is_overdue = self.object.Duedate > datetime.date.today() 
self.object.overdue = 1 if is_overdue else None 

完全なコード:私はこれを変更した場合

class ActionCreateView(LoginRequiredMixin, generic.CreateView): 
    login_url = '/scrty/login/' 
    template_name = "nodiso/actioncreate.html" 
    form_class = forms.LeadActionCreateForm 
    # success_url = reverse_lazy('nodisoapp:leaddetail', kwargs['pk']) 

    def get_success_url(self, **kwargs): 
      return reverse("nodisoapp:leaddetail", kwargs={'pk': self.kwargs['pk']}) 

    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     is_overdue = self.object.Duedate > datetime.date.today() 
     self.object.overdue = 1 if is_overdue else None 

     self.object.lead_id = self.kwargs['pk'] 
     self.object.creator = self.request.user.firstname 
     self.object.save() 
     return super(ActionCreateView, self).form_valid(form) 
+0

絶対に素晴らしい、ありがとうございました – Hennie

関連する問題