#31974: SplitDateTimeWidget and is_valid problem -------------------------------------+------------------------------------- Reporter: carson512 | Owner: nobody Type: | Status: new Uncategorized | Component: Forms | Version: 3.0 Severity: Normal | Keywords: SplitDateTimeWidget Triage Stage: | Has patch: 0 Unreviewed | Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | -------------------------------------+------------------------------------- this the models.py {{{ class Rent_Car(models.Model): rent_time = models.DateTimeField( blank=False) car = models.ForeignKey(Cop_Car, on_delete=models.SET_NULL, null=True, blank=False) user = models.ForeignKey(Users, on_delete=models.SET_NULL, null=True, blank=False) car_rage = models.IntegerField(null=False, blank=False) rent_mark = models.CharField(max_length=300", null=True, blank=True) }}} this the forms.py {{{ class RentcarForm(forms.ModelForm): class Meta: model = models.Rent_Car fields = '__all__' # model.rent_time = forms.DateTimeField(widget=forms.SplitDateTimeWidget) # initial = datetime.datetime.now() # model.rent_time = datetime.datetime.now() widgets = { 'rent_time': forms.SplitDateTimeWidget(date_attrs={'class ':'form-control', 'type':'date'},time_attrs={'class':'form-control', 'type':'time'},date_format='%Y-%m-%d'), }
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. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/052.18b14a266c41c7855b2b83c174d944ea%40djangoproject.com.