代码之家  ›  专栏  ›  技术社区  ›  Aran Freel

Django使用日期时间.日期()作为DateField的输入,以实现过去日期的输入

  •  1
  • Aran Freel  · 技术社区  · 5 年前

    import datetime
    
    class BalanceSheet(models.Model): 
    
         ticker = models.ForeignKey(Security, on_delete=models.CASCADE, related_name="balance_sheet")
    
         date = models.DateField(default=datetime.date)
    

    但当我试图在管理面板中添加记录时,收到以下错误

    TypeError at /admin/financials/balancesheet/add/
    function missing required argument 'year' (pos 1)
    Request Method: GET
    Request URL:    http://localhost:8000/admin/financials/balancesheet/add/
    Django Version: 3.1
    Exception Type: TypeError
    Exception Value:    
    function missing required argument 'year' (pos 1)
    Exception Location: /usr/local/lib/python3.7/site-packages/django/db/models/fields/__init__.py, line 831, in get_default
    Python Executable:  /usr/local/bin/python
    Python Version: 3.7.8
    Python Path:    
    ['/code',
     '/usr/local/lib/python37.zip',
     '/usr/local/lib/python3.7',
     '/usr/local/lib/python3.7/lib-dynload',
     '/usr/local/lib/python3.7/site-packages']
    Server time:    Sun, 09 Aug 2020 11:40:48 +0000
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Aran Freel    5 年前

    传递的默认值需要一个参数,这就是为什么会出现错误。如果你通过了 datetime.date.today

    尝试替换

     ...
     date = models.DateField(default=datetime.date)
    

    有:

    import datetime
    
    ...
    date = models.DateField(default=datetime.date.today)
    

    from datetime import datetime
    
    ...    
    date = models.DateField(default=datetime.now)