2014-03-05 54 views
0

我有一个以下模型:Django的表格 - DateTime字段显示日期仅

class Sponsorship(models.Model): 
    sponsor = models.ForeignKey(Sponsor, related_name='sponsorships') 
    start_datetime = models.DateTimeField(null=True, blank=True) 
    end_datetime = models.DateTimeField(null=True, blank=True) 

,并形成模型是这样的:

class SponsorshipForm(ModelForm): 

    class Meta: 
     model = Sponsorship 
     fields = ('start_datetime', 'end_datetime') 
     widgets = { 
      'start_datetime': forms.DateTimeInput(attrs={'class': 
                  'form-control'}), 
      'end_datetime': forms.DateTimeInput(attrs={'class': 
                  'form-control'}), 
     } 



SponsorShipsFormSet = inlineformset_factory(Sponsor, Sponsorship, 
               form=SponsorshipForm, extra=2) 

在视图中我做平常:

SponsorShipsFormSet(instance=self.object) 

但当形式呈现,日期时间输入字段只为起息日,没有时间。

为什么形式没有日期和时间实例?

编辑

我印刷,在模板中,输入字段的值:

{{ form.start_datetime.value }} 

和它确实有日期时间值,它应。

回答

1

好吧,这是一个在一百万的见解!

这些麻烦的原因是从设置DATETIME_INPUT_FORMATS

我有什么之前:

DATETIME_INPUT_FORMATS = (
    '%d %B %Y',    # '05 March 2014' 
    '%d %B %Y - %H:%M',  # '05 March 2014 - 08:07' 
    '%d %B %Y - %H:%M:%S',  # '05 March 2014 - 08:07:59' 
    '%d %B %Y - %H:%M:%S.%f', # '05 March 2014 - 08:07:59.0001' 

    '%d/%m/%Y %H:%M:%S.%f', # '25/10/05 14:30:59.000200' 
    '%d/%m/%Y %H:%M:%S',  # '25/10/05 14:30:59' 
    '%d/%m/%Y %H:%M',   # '25/10/05 14:30' 
    '%d/%m/%Y',    # '25/10/05' 

    '%d-%m-%Y %H:%M:%S.%f', # '25-10-05 14:30:59.000200' 
    '%d-%m-%Y %H:%M:%S',  # '25-10-05 14:30:59' 
    '%d-%m-%Y %H:%M',   # '25-10-05 14:30' 
    '%d-%m-%Y',    # '25-10-05' 

    '%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200' 
    '%Y-%m-%d %H:%M:%S',  # '2006-10-25 14:30:59' 
    '%Y-%m-%d %H:%M',   # '2006-10-25 14:30' 
    '%Y-%m-%d',    # '2006-10-25' 

    '%m/%d/%Y %H:%M:%S.%f', # '10/25/2006 14:30:59.000200' 
    '%m/%d/%Y %H:%M:%S',  # '10/25/2006 14:30:59' 
    '%m/%d/%Y %H:%M',   # '10/25/2006 14:30' 
    '%m/%d/%Y',    # '10/25/2006' 

    '%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200' 
    '%m/%d/%y %H:%M:%S',  # '10/25/06 14:30:59' 
    '%m/%d/%y %H:%M',   # '10/25/06 14:30' 
    '%m/%d/%y',    # '10/25/06' 
) 

什么固定的问题,我有:

DATETIME_INPUT_FORMATS = (
    '%d %B %Y - %H:%M:%S.%f', # '05 March 2014 - 08:07:59.0001' 
    '%d %B %Y - %H:%M:%S',  # '05 March 2014 - 08:07:59' 
    '%d %B %Y - %H:%M',  # '05 March 2014 - 08:07' 
    '%d %B %Y',    # '05 March 2014' <- this line was first before 

    '%d/%m/%Y %H:%M:%S.%f', # '25/10/05 14:30:59.000200' 
    '%d/%m/%Y %H:%M:%S',  # '25/10/05 14:30:59' 
    '%d/%m/%Y %H:%M',   # '25/10/05 14:30' 
    '%d/%m/%Y',    # '25/10/05' 

    '%d-%m-%Y %H:%M:%S.%f', # '25-10-05 14:30:59.000200' 
    '%d-%m-%Y %H:%M:%S',  # '25-10-05 14:30:59' 
    '%d-%m-%Y %H:%M',   # '25-10-05 14:30' 
    '%d-%m-%Y',    # '25-10-05' 

    '%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200' 
    '%Y-%m-%d %H:%M:%S',  # '2006-10-25 14:30:59' 
    '%Y-%m-%d %H:%M',   # '2006-10-25 14:30' 
    '%Y-%m-%d',    # '2006-10-25' 

    '%m/%d/%Y %H:%M:%S.%f', # '10/25/2006 14:30:59.000200' 
    '%m/%d/%Y %H:%M:%S',  # '10/25/2006 14:30:59' 
    '%m/%d/%Y %H:%M',   # '10/25/2006 14:30' 
    '%m/%d/%Y',    # '10/25/2006' 

    '%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200' 
    '%m/%d/%y %H:%M:%S',  # '10/25/06 14:30:59' 
    '%m/%d/%y %H:%M',   # '10/25/06 14:30' 
    '%m/%d/%y',    # '10/25/06' 
) 

因此,洞察是:

当Django呈现在表格日期时间,它从读DATETIME_INPUT_FORMATS并使用适合的第一种格式。因此,格式应该从具有最多细节的格式转到具有最少细节的格式。

在另一方面,当Django从客户端读取日期时间输入,它通过所有DATETIME_INPUT_FORMATS,直到找到适合如果没有,日期时间将是无效的。