def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
for field_name,field in self.fields.items():
field.widget.attrs.update({'class':'form-control'})
}}}
this is the views.py
{{{
def rentcar_add_edit(request, rid=None):
rentcar_obj = models.Rent_Car.objects.filter(pk=rid).first()
if request.method == 'GET':
if rid:
rentcar_form = RentcarForm(instance=rentcar_obj)
else:
rentcar_form = RentcarForm(initial={'rent_time':
datetime.datetime.now(), 'user': request.user}, instance=rentcar_obj)
return render(request, 'edit.html', {'rentcar_form':
rentcar_form})
else:
rentcar_form = RentcarForm(request.POST, instance=rentcar_obj)
if rentcar_form.is_valid():
print(rentcar_form.errors)
print(rentcar_form.cleaned_data)
rentcar_form.save()
messages.success(request,'ok!')
return redirect('list')
else:
return render(request, 'edit.html', {'rentcar_form':
rentcar_form})
}}}
when post the rent_time. show the error' 'list' object has no attribute
'strip''
the traceback below:
{{{
D:\Python\lib\site-packages\django\core\handlers\exception.py in inner
response = get_response(request) …
▼ Local vars
Variable Value
exc
AttributeError("'list' object has no attribute 'strip'")
get_response
<bound method BaseHandler._get_response of
<django.core.handlers.wsgi.WSGIHandler object at 0x000001BBE3C72EC8>>
request
<WSGIRequest: POST '/rentcar/add/'>
D:\Python\lib\site-packages\django\core\handlers\base.py in _get_response
response = self.process_exception_by_middleware(e,
request) …
▼ Local vars
Variable Value
callback
<function rentcar_add_edit at 0x000001BBE3B0A1F8>
callback_args
()
callback_kwargs
{}
middleware_method
<bound method CsrfViewMiddleware.process_view of
<django.middleware.csrf.CsrfViewMiddleware object at 0x000001BBE3CAC788>>
request
<WSGIRequest: POST '/rentcar/add/'>
resolver
<URLResolver 'carsoft.urls' (None:None) '^/'>
resolver_match
ResolverMatch(func=rentcar.views.rentcar_add_edit, args=(), kwargs={},
url_name=add, app_names=[], namespaces=[], route=rentcar/add/)
response
None
self
<django.core.handlers.wsgi.WSGIHandler object at 0x000001BBE3C72EC8>
wrapped_callback
<function rentcar_add_edit at 0x000001BBE3B0A1F8>
D:\Python\lib\site-packages\django\core\handlers\base.py in _get_response
response = wrapped_callback(request, *callback_args,
**callback_kwargs) …
▼ Local vars
Variable Value
callback
<function rentcar_add_edit at 0x000001BBE3B0A1F8>
callback_args
()
callback_kwargs
{}
middleware_method
<bound method CsrfViewMiddleware.process_view of
<django.middleware.csrf.CsrfViewMiddleware object at 0x000001BBE3CAC788>>
request
<WSGIRequest: POST '/rentcar/add/'>
resolver
<URLResolver 'carsoft.urls' (None:None) '^/'>
resolver_match
ResolverMatch(func=rentcar.views.rentcar_add_edit, args=(), kwargs={},
url_name=add, app_names=[], namespaces=[], route=rentcar/add/)
response
None
self
<django.core.handlers.wsgi.WSGIHandler object at 0x000001BBE3C72EC8>
wrapped_callback
<function rentcar_add_edit at 0x000001BBE3B0A1F8>
D:\Python\lib\site-packages\django\contrib\auth\decorators.py in
_wrapped_view
return view_func(request, *args, **kwargs) …
▼ Local vars
Variable Value
args
()
kwargs
{}
login_url
None
redirect_field_name
'next'
request
<WSGIRequest: POST '/rentcar/add/'>
test_func
<function login_required.<locals>.<lambda> at 0x000001BBE3B0A0D8>
view_func
<function rentcar_add_edit at 0x000001BBE3AFACA8>
D:\202008\carsoft\rentcar\views.py in rentcar_add_edit
if rentcar_form.is_valid(): …
▼ Local vars
Variable Value
rentcar_form
<RentcarForm bound=True, valid=True,
fields=(rent_time;car;user;car_rage;rent_mark)>
rentcar_obj
None
request
<WSGIRequest: POST '/rentcar/add/'>
rid
None
D:\Python\lib\site-packages\django\forms\forms.py in is_valid
return self.is_bound and not self.errors …
▼ Local vars
Variable Value
self
<RentcarForm bound=True, valid=True,
fields=(rent_time;car;user;car_rage;rent_mark)>
D:\Python\lib\site-packages\django\forms\forms.py in errors
self.full_clean() …
▼ Local vars
Variable Value
self
<RentcarForm bound=True, valid=True,
fields=(rent_time;car;user;car_rage;rent_mark)>
D:\Python\lib\site-packages\django\forms\forms.py in full_clean
self._clean_fields() …
▼ Local vars
Variable Value
self
<RentcarForm bound=True, valid=True,
fields=(rent_time;car;user;car_rage;rent_mark)>
D:\Python\lib\site-packages\django\forms\forms.py in _clean_fields
value = field.clean(value) …
▼ Local vars
Variable Value
field
<django.forms.fields.DateTimeField object at 0x000001BBE41AAC88>
name
'rent_time'
self
<RentcarForm bound=True, valid=True,
fields=(rent_time;car;user;car_rage;rent_mark)>
value
['2020-09-02', '11:17']
D:\Python\lib\site-packages\django\forms\fields.py in clean
value = self.to_python(value) …
▼ Local vars
Variable Value
self
<django.forms.fields.DateTimeField object at 0x000001BBE41AAC88>
value
['2020-09-02', '11:17']
D:\Python\lib\site-packages\django\forms\fields.py in to_python
result = super().to_python(value) …
▼ Local vars
Variable Value
__class__
<class 'django.forms.fields.DateTimeField'>
self
<django.forms.fields.DateTimeField object at 0x000001BBE41AAC88>
value
['2020-09-02', '11:17']
D:\Python\lib\site-packages\django\forms\fields.py in to_python
value = value.strip() …
▼ Local vars
Variable Value
self
<django.forms.fields.DateTimeField object at 0x000001BBE41AAC88>
value
['2020-09-02', '11:17']
}}}
looks the widgets SplitDateTimeWidget return the datetime field with a
list not a str.
--
Ticket URL: <https://code.djangoproject.com/ticket/31974>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* status: new => closed
* resolution: => invalid
Comment:
Please review the
[https://docs.djangoproject.com/en/3.1/ref/forms/widgets/#multiwidget
`MultiWidget` docs]. There's an example implementing a subclass to work
with `DateField`, rather than the expected `MultiValueField`. You can
adapt that for your use-case.
Please also review TicketClosingReasons/UseSupportChannels, as the issue
tracker is not the appropriate place for this kind of question about usage
errors.
Thanks.
--
Ticket URL: <https://code.djangoproject.com/ticket/31974#comment:1>