在Django2.1中创建CreatingUserField,created_date,updated_by和updated_date的替代方法

时间:2019-02-01 15:56:15

标签: django-2.1

1对于我的一个应用程序,以前我使用django 1.10并跟踪创建的模型,我使用audit_log更新了该模型,但是在django 2.1中不起作用。我收到以下错误,所以你们能建议我如何实现创建模型,并通过跟踪模型进行更新。

    from audit_log.models.fields import CreatingUserField, LastUserField
    class AuthStampedModel(Model):

    created_by = CreatingUserField(verbose_name = _("created by"), related_name = "created_%(app_label)s_%(class)s_set")
    super(LastUserField, self).__init__(to = to, null = null, editable = editable, **kwargs)
TypeError: __init__() missing 1 required positional argument: 'on_delete'

这是我的代码-

class Plan_type(models.Model):
    type = models.CharField(max_length=250, verbose_name=_("Plan Type"))
    created_by = CreatingUserField(related_name = "SubscriptionPlanCreatedBy")
    created_date = models.DateTimeField(auto_now_add=True,auto_now=False)
    updated_by = LastUserField(related_name = "SubscriptionPlanUpdatedBy")
    updated_date = models.DateTimeField(auto_now_add=False, auto_now=True)

1 个答案:

答案 0 :(得分:0)

我看到这是一个古老的问题,但以防万一您尚未找到解决方案...

您尝试使用django.models中的选项之一传递on_delete吗?

如果创建记录的用户被删除,则应指定要对模型中的记录执行的操作。

例如,如果要防止在模型中引用用户时将其删除:

class Plan_type(models.Model):
    type = models.CharField(max_length=250, verbose_name=_("Plan Type"))
    created_by = CreatingUserField(related_name="SubscriptionPlanCreatedBy", on_delete=models.PROTECT)
    created_date = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated_by = LastUserField(related_name = "SubscriptionPlanUpdatedBy", on_delete=models.PROTECT)
    updated_date = models.DateTimeField(auto_now_add=False, auto_now=True)

这些是选项:

来源:https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.on_delete

  

CASCADE

     

级联删除。 Django将SQL约束的行为模拟为ON   删除CASCADE,并删除包含ForeignKey的对象。

     

保护

     

通过引发ProtectedError来防止删除引用的对象   django.db.IntegrityError的子类。

     

SET_NULL

     

将ForeignKey设置为null;仅当null为True时才可能。

     

SET_DEFAULT

     

将ForeignKey设置为其默认值; ForeignKey的默认值   必须设置。