【问题标题】:Django SplitDateTime widget throws 'list' object has no attribute 'strip'Django SplitDateTime 小部件抛出“list”对象没有属性“strip”
【发布时间】:2020-03-14 21:04:12
【问题描述】:

我正在尝试使用 django 创建具有开始日期时间和结束日期时间的事件。在表单中,我尝试使用 AdminSPlitDateTime 小部件分隔日期和时间输入(我想输入一些 JS。)当我尝试创建事件时,django 给了我“'list' object has no attribute'剥离'”错误。 SplitDateTimeWidget 也会发生。

当我删除小部件或使用 DateTimeInput 小部件(没有拆分)时,一切都按预期工作。但是用户可能会混淆输入日期时间的正确格式。所以我想使用 AdminSplitDateTime。

一定是用小部件分割日期和时间,但我想不出办法解决这个问题。

使用 Python 3.7 django 2.2.7 pipenv 2018.11.26

我的模特是

class Event(models.Model):
    event_start = models.DateTimeField()
    event_end = models.DateTimeField()
    notes = models.CharField(max_length=140, null=True, blank=True)
    hasta = models.ForeignKey(Hasta, on_delete=models.CASCADE)
    doktor = models.ForeignKey(User, on_delete=models.CASCADE)



    def __str__(self):
        return f'{self.event_start} -- {self.event_end}'

    class Meta:
        ordering = ['event_start'] 

我的表单类是:

class EventCreateForm(ModelForm):
    event_start = forms.DateTimeField(widget= admin_widgets.AdminSplitDateTime())
    event_end = forms.DateTimeField(widget=admin_widgets.AdminSplitDateTime())

    def __init__(self, *args, **kwargs):
        """this whole thing is for filtering the hasta objects. User can only create an event with his patients."""
        self.user = kwargs.pop('user')
        super().__init__(*args, **kwargs)
        self.fields['hasta'].queryset = Hasta.objects.filter(doktor_id=self.user.id)

    class Meta:
        model = Event
        fields = [
            'event_start',
            'event_end',
            'notes',
            'hasta',
        ]
        labels = {
            'event_start': _('Randevu Başlangıç Tarihi'),
            'event_end': _('Randevu Bitiş Tarihi'),
            'notes': _('Notlar')

        } 

我的视图类是:

class EventCreateView(LoginRequiredMixin, CreateView):
    model = Event
    template_name = 'create_event.html'
    form_class = EventCreateForm
    success_url = '/randevu'

    def get_form_kwargs(self):
        """This adds the user object to the kwargs and it will be used in create event form to filter
        the patients of the current user"""
        kwargs = super(EventCreateView, self).get_form_kwargs()
        kwargs.update({'user': self.request.user})
        return kwargs

    def form_valid(self, form):
        """This adds the current user id to the created event"""
        form.instance.doktor = self.request.user
        form.save()
        messages.success(self.request, f"randevu Kaydedildi!")
        return super().form_valid(form)

我收到以下错误;

AttributeError: 'list' object has no attribute 'strip'
[19/Nov/2019 13:34:11] "POST /randevu/yeni_randevu/ HTTP/1.1" 500 117105
Internal Server Error: /randevu/yeni_randevu/
Traceback (most recent call last):
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\contrib\auth\mixins.py", line 52, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\views\generic\edit.py", line 172, in post
    return super().post(request, *args, **kwargs)
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\views\generic\edit.py", line 141, in post
    if form.is_valid():
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\forms\forms.py", line 185, in is_valid
    return self.is_bound and not self.errors
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\forms\forms.py", line 180, in errors
    self.full_clean()
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\forms\forms.py", line 381, in full_clean
    self._clean_fields()
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\forms\forms.py", line 399, in _clean_fields
    value = field.clean(value)
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\forms\fields.py", line 148, in clean
    value = self.to_python(value)
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\forms\fields.py", line 462, in to_python
    result = super().to_python(value)
  File "C:\Users\alper\.virtualenvs\sekreter-1XQSW2uk\lib\site-packages\django\forms\fields.py", line 379, in to_python
    value = value.strip()
AttributeError: 'list' object has no attribute 'strip'

【问题讨论】:

    标签: python django python-3.x


    【解决方案1】:

    您必须将SplitDateTimeFieldAdminSplitDateTime 一起使用。

    【讨论】:

    • @alias51 AdminSplitDateTime 小部件返回的值是listDateTimeField 期望值是一个字符串并调用.split(),这会给你这个异常。
    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 2022-08-21
    • 2020-03-25
    • 1970-01-01
    • 2022-11-17
    • 2015-02-02
    • 2017-05-03
    • 2020-03-25
    相关资源
    最近更新 更多