根据文档,如果你给一个模型字段一个可调用的默认值,那么这个默认方法没有参数:

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

10-07 19:08
查看更多