I get an error when I try to add a widget to the form.
The error:
JavaScript
x
4
1
File "C:Userslibsite-packagesdjangoformsfields.py", line 558, in __init__
2
super().__init__(**kwargs)
3
TypeError: __init__() got an unexpected keyword argument 'attrs'
4
The model
JavaScript
1
7
1
class Video(models.Model):
2
author = models.ForeignKey(Account, on_delete=models.CASCADE)
3
video = models.FileField(upload_to='post-videos')
4
title = models.CharField(max_length=100)
5
description = models.TextField(null=True, blank=True)
6
video_poster = models.ImageField(max_length=255, upload_to='post-videos')
7
The views
JavaScript
1
35
35
1
def VideosUploadView(request, *args, **kwargs):
2
all_videos = Video.objects.all()
3
V_form = Video_form()
4
video_added = False
5
6
if not request.user.is_active:
7
# any error you want
8
return redirect('login')
9
10
try:
11
account = Account.objects.get(username=request.user.username)
12
except:
13
# any error you want
14
return HttpResponse('User does not exits.')
15
16
if 'submit_v_form' in request.POST:
17
print(request.POST)
18
V_form = Video_form(request.POST, request.FILES)
19
if V_form.is_valid():
20
instance = V_form.save(commit=False)
21
22
instance.author = account
23
instance.save()
24
V_form = Video_form()
25
video_added = True
26
27
contex = {
28
'all_videos': all_videos,
29
'account': account,
30
'V_form': V_form,
31
'video_added': video_added,
32
}
33
34
return render(request, "video/upload_videos.html", contex)
35
The form
class Video_form(forms.ModelForm):
JavaScript
1
13
13
1
class Meta:
2
model = Video
3
fields = ('title', 'description', 'video', 'video_poster')
4
5
widgets = {
6
'title': forms.TextInput(attrs={'class': 'form-control'}),
7
'description': forms.TextInput(attrs={'class': 'form-control'}),
8
'video': forms.FileField(widget=forms.FileInput(attrs={'class': 'form-control'})),
9
'video_poster': forms.ImageField(attrs={'class': 'form-control'}),
10
11
12
}
13
Advertisement
Answer
You must assign valid widget in the Video_form
:
JavaScript
1
7
1
widgets = {
2
'title': forms.TextInput(attrs={'class': 'form-control'}),
3
'description': forms.TextInput(attrs={'class': 'form-control'}),
4
'video': forms.FileInput(attrs={'class': 'form-control'}),
5
'video_poster': forms.ClearableFileInput(attrs={'class': 'form-control'}),
6
}
7
forms.FileField
and forms.ImageField
are fields not widgets.