相关疑难解决方法(0)

当使用lambda作为属性的默认值时,Django 1.7.1 Makemigrations失败

我正在使用Django 1.7.1.我的模型看起来像这样:

from datetime import datetime
from django.db import models

class myModel(models.Model):
    x = models.CharField(max_length=254,null=True, blank=True,)
Run Code Online (Sandbox Code Playgroud)

一切都很好.

但是,当我将以下属性添加到myModel时,它会中断:

    y = models.DateTimeField(default=lambda: datetime.utcnow() + timedelta(days=1), editable=False)
Run Code Online (Sandbox Code Playgroud)

manage.py makemigrations 给我以下错误:

ValueError: Cannot serialize function: lambda
Run Code Online (Sandbox Code Playgroud)

这似乎是一个已知的错误:http://comments.gmane.org/gmane.comp.python.django.scm/125724

那么我该如何解决呢?y从创建模型的那一刻起,我需要将默认值自动设置为24小时.

django lambda django-models django-migrations

25
推荐指数
1
解决办法
7907
查看次数

Django DateTimeRangeField:默认=[timezone.now()]-[timezone.now()]+[10YEARS]

我想要一个“active_in”属性作为时间范围。我假设 DBMS 针对 postgresql tsrange 字段进行了优化,因此最好使用 DateTimeRangeField 而不是 2 个单独的字段作为 start_date 和 end_date。

这样做我希望该字段有一个默认值。

active_in = models.DateTimeRangeField(default=timezone.now+'-'+timezone.now+10YEARS)
Run Code Online (Sandbox Code Playgroud)
  • 我对 DateTimeRangeField 性能的假设是否正确?
  • 是否有一个聪明的解决方案可以创建一个新的;函数、类或简单地操作倒数第二个数字?

我可能的解决方案:

使用字符串操作的代码:

active_in = models.DateTimeRangeField(default=timezone.now+'-'+timezone.now[:-2]+'30')
Run Code Online (Sandbox Code Playgroud)

使用自定义函数对象的代码:(从此处调整: https: //stackoverflow.com/a/27491426/7458018

def today_years_ahead():
    return timezone.now + '-' timezone.now() + timezone.timedelta(years=10)

class MyModel(models.Model):
    ...
    active_in = models.DateTimeRangeField(default=today_years_ahead)
Run Code Online (Sandbox Code Playgroud)

django postgresql django-models

4
推荐指数
1
解决办法
1056
查看次数

使用DateTimeField和timedelta默认的Django迁移

我在我的datetime一个Django模型上设置默认设置时遇到了问题

from django.db import models
from django.utils import timezone

class MyModel(models.Model):
    my_datetime = models.DateTimeField(default=timezone.now() + timezone.timedelta(+14))
Run Code Online (Sandbox Code Playgroud)

问题是,每次我运行makemigrations它创建于该领域新的迁移,与序列化到什么值等于默认值现在.

migrations.AlterField(
    model_name='mymodel',
    name='my_datetime',
    field=models.DateTimeField(default=datetime.datetime(2016, 2, 4, 5, 56, 7, 800721, tzinfo=utc)),
    )
Run Code Online (Sandbox Code Playgroud)

无论如何我可以为将来的DateTimeField设置默认值吗?

python django

3
推荐指数
1
解决办法
1897
查看次数