Django 基于另一个字段的字段默认值';s值

Django 基于另一个字段的字段默认值';s值,django,functional-programming,Django,Functional Programming,如何根据同一实例上另一个字段的值为Django模型字段定义默认值 我想根据创建的时间戳为模型定义code: 来自django.db导入模型的 类别LoremIpsum(models.Model): 代码=models.CharField( 最大长度=100, 违约=( lambda x:“LOREM-{0.已创建:%Y%m%d-%H%m%S}”。格式(x)), ) 已创建=models.DateTimeField( auto\u now\u add=True, ) 这不起作用,因为为defau

如何根据同一实例上另一个字段的值为Django模型字段定义默认值

我想根据创建的
时间戳为模型定义
code

来自django.db导入模型的

类别LoremIpsum(models.Model):
代码=models.CharField(
最大长度=100,
违约=(
lambda x:“LOREM-{0.已创建:%Y%m%d-%H%m%S}”。格式(x)),
)
已创建=models.DateTimeField(
auto\u now\u add=True,
)
这不起作用,因为为
default
定义的函数没有收到任何参数

如何为
code
字段定义默认值,使其从该实例的
创建的
字段值中派生出来?

使用,可以通过定义一个函数从模型中接收来实现

来自django.db导入模型的

导入django.dispatch
类别LoremIpsum(models.Model):
代码=models.CharField(
最大长度=100,
)
已创建=models.DateTimeField(
auto\u now\u add=True,
)
@django.dispatch.receiver(models.signals.post_init,sender=LoremIpsum)
def set_default_loremipsum_代码(发送方、实例、*args、**kwargs):
"""
在“实例”上设置“代码”的默认值。
:param sender:发送信号的'LoremIpsum'类。
:param instance:正在处理的'LoremIpsum'实例
草签。
:返回:无。
"""
如果不是instance.code:
instance.code=“LOREM-{0.created:%Y%m%d-%H%m%S}”。格式(实例)

类一旦对实例进行了初始化,就会发送
post_init
信号。这样,在测试是否设置了不可为空的字段之前,实例将获得
code
的值。

我的建议是在最初创建对象之后设置该值。不能基于不存在的内容设置默认值。如果在创建后执行此操作,则可以使用
已创建的
字段