2016-10-12 2 views
3

Я получаю ошибку времени выполнения во время выполнения команды python manage.py runserver. Терминал показывает ошибку: линии 35, в CustomertaskForm, StartDate = forms.DateInput (виджет = forms.DateField()) TypeError: INIT() получила неожиданный аргумент ключевого слова 'виджет'ТипError: __init __() получил неожиданный аргумент ключевого слова 'widget'

forms.py

class CustomertaskForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 
     super(CustomertaskForm, self).__init__(*args, **kwargs) 

    title=forms.CharField(widget=forms.TextInput(attrs={'class':'form-control', 'required': 'required'})) 
    discription=forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'required': 'required'})) 
    startdate=forms.DateInput(widget=forms.DateField()) 
    enddate=forms.DateInput(widget=forms.DateField()) 

    class Meta: 
     model=Customertask 
     fields=['title','discription','startdate','enddate'] 

models.py

class Customertask(models.Model): 
    title=models.CharField(max_length=200) 
    discription=models.CharField(max_length=500) 
    startdate=models.DateTimeField() 
    enddate=models.DateTimeField() 

view.py

def createtasks(request): 
if request.method == 'POST': 
    form=CustomertaskForm(request.POST) 
    if form.is_valid(): 
     tasksave=Customertask.objects.create(
      customer=models.ForeignKey(Customer) 
      title=form.cleaned_data['title'], 
      discription = form.cleaned_data['discription'], 
      startdate=form.cleaned_data['startdate'], 
      enddate=form.cleaned_data['enddate'] 
     ) 
     tasksave.save() 
     return HttpResponseRedirect('/customer/tasktable') 
else: 
    form=CustomertaskForm() 
return render(request, 'customer/createtasks.html', {'form': form}) 

Важно, чтобы миграция выполнялась каждый раз при изменении models.py или forms.py .... пожалуйста, дайте комментарий к миграции.

+0

Пожалуйста, пост * все * отслеживающий, когда вы будете задавать вопросы переполнения стека. – Alasdair

ответ

0

Try this in your form.

Forms.py

 widgets = { 
     'Title': forms.TextInput(attrs={'class': 'form-control','required':'required'}), 
     'Description': forms.TextInput(attrs={'class': 'form-control','required':'required'}), 
     'StartDate': forms.DateInput(attrs={'class': 'form-control', 'type': 'date','required':'required'}), 
     'EndDate': forms.DateInput(attrs={'class': 'form-control', 'type': 'date','required':'required'}), 
     } 
3

У вас есть свои виджеты и поля не так - DateField - это поле, а DateInput - виджет. Таким образом, ваша форма использует forms.DateField(widget=forms.DateInput()). Однако, поскольку DateField использует DateInput по умолчанию, вы можете оставить виджет аргумент целиком:

class CustomertaskForm(forms.ModelForm): 
    ... 
    startdate=forms.DateField() 
    enddate=forms.DateField() 

Как и в сторону, вы можете создать задачу, сохраняя форму модели. Вам не нужно звонить Customertask.objects.create() вручную:

if form.is_valid(): 
    tasksave=form.save() 
    return HttpResponseRedirect('/customer/tasktable') 
Смежные вопросы