根据文档,如果你给一个模型字段一个可调用的默认值,那么这个默认方法没有参数:
https://docs.djangoproject.com/en/1.8/ref/models/fields/#default
def contact_default():
return {"email": "to1@example.com"}
contact_info = JSONField("ContactInfo", default=contact_default)
我缺少对实例其他属性的访问权限。充其量我想访问
self
。用例:
class Face(models.Model):
male=models.BooleanField()
beard=models.NullBooleanField()
如果面部不是男性,则
beard
应设置为 False。默认值应仅应用于新实例。
最佳答案
您不能在函数中使用 self 来定义默认值。为此,您必须使用 pre_save 信号。
from django.db.models.signals import post_save, pre_save
@receiver(pre_save, sender=Face)
def check_beard(sender, instance=None, created=False, **kwargs):
if not instance.id and not instance.male: # Check instance id if it saving for first time, and set default
instance.beard = False