2014-11-04 3 views
0

Это класс в моих forms.py Что я хочу сделать: есть два поля в этой форме: admin_time и execute_time. Я хочу сделать сравнение с данными перед сохранением.обработка данных в forms.py django перед сохранением

if admin_time: 
    execution_time=admin_time 

Это то, что я намереваюсь достичь.

class TaskForm(forms.ModelForm): 
keywords = (forms.CharField(
      help_text=_('Please use commas to separate your keywords.'), 
      required=False, 
      widget=forms.TextInput(attrs={'class': 'medium-field'}))) 
admin_time = forms.CharField(
      help_text=_('Enter If more than 60 minutes.'), 
      required=False, 
      widget=forms.TextInput(attrs={'class': 'fill-width'})) 

def __init__(self, *args, **kwargs): 
    if kwargs['instance']: 
     initial = kwargs.get('initial', {}) 
     initial['keywords'] = kwargs['instance'].keywords_list 
     kwargs['initial'] = initial 
    super(TaskForm, self).__init__(*args, **kwargs) 

def _process_keywords(self, creator): 
    if 'keywords' in self.changed_data: 
     kw = [k.strip() for k in self.cleaned_data['keywords'].split(',')] 
     self.instance.replace_keywords(kw, creator) 

def clean(self): 
    cleaned_data = super(TaskForm, self).clean() 
    start_date = cleaned_data.get('start_date') 
    end_date = cleaned_data.get('end_date') 
    if start_date and end_date: 
     if start_date >= end_date: 
      raise forms.ValidationError(_("'End date' must be after 'Start date'")) 
    return cleaned_data 

def save(self, creator, *args, **kwargs): 
    self.instance.creator = creator 
    super(TaskForm, self).save(*args, **kwargs) 
    if kwargs.get('commit', True): 
     self._process_keywords(creator) 
    return self.instance 

class Media: 
    css = { 
     'all': ('css/admin_ace.css',) 
    } 

class Meta: 
    model = Task 
    fields = ('name', 'short_description', 'execution_time', 'difficulty', 
       'priority', 'repeatable', 'team', 'project', 'type', 'start_date', 
       'end_date', 'why_this_matters', 'prerequisites', 'instructions', 
       'is_draft', 'is_invalid') 
    widgets = { 
     'name': forms.TextInput(attrs={'size': 100, 'class': 'fill-width'}), 
     'short_description': forms.TextInput(attrs={'size': 100, 'class': 'fill-width'}), 
     'instructions': AceWidget(mode='markdown', theme='textmate', width='800px', 
            height='300px', wordwrap=True, 
            attrs={'class': 'fill-width'}), 
     'start_date': CalendarInput, 
     'end_date': CalendarInput, 
     'why_this_matters': forms.Textarea(attrs={'rows': 2, 'class': 'fill-width'}), 
     'prerequisites': forms.Textarea(attrs={'rows': 4, 'class': 'fill-width'}), 
    } 

То, что я пытался добавляет эту функцию:

def _execution_time(self): 
    cleaned_data = super(TaskForm, self).clean() 
    data = cleaned_data.get('execution_time') 
    admin_time = cleaned_data.get('admin_time') 
    if admin_time: 
     data=admin_time 
    return data 

Но ее не работает. Требуется помощь по этому поводу.

+0

«Но что-то не так». Что конкретно не так? – Celeo

+0

где вы вызываете время выполнения? Что произойдет, если вы переместите логику execute_time в свой чистый метод? – dm03514

+0

Что я имел в виду: эта проверка не происходит в моем коде. Даже если присутствует admin_time, то, что я могу видеть на следующей странице detail.html, является только время исполнения. –

ответ

Смежные вопросы