Альтернатива для создания CreateUserField, create_date, updated_by & updated_date в Django2.1 - PullRequest
0 голосов
/ 01 февраля 2019

1 для одного из моих приложений, ранее я использовал django 1.10 и для отслеживания моделей, созданных, обновленных я использовал aud_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 голосов
/ 27 июня 2019

Я вижу, что это старый вопрос, но на тот случай, если вы еще не нашли решение ...

Вы пытались передать on_delete с одним из параметров из django.models?

В нем должно быть указано, что должно происходить с записями в вашей модели, если пользователь, создавший запись, удален.

Например, если вы хотите запретить удаление пользователей, когда ониссылка в вашей модели:

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 DELETE CASCADE, а также удаляет объект, содержащий ForeignKey.

PROTECT

Предотвращает удаление указанного объекта, вызывая ProtectedError, aподкласс django.db.IntegrityError.

SET_NULL

Установить значение ForeignKey пустым;это возможно только в том случае, если значение NULL равно True.

SET_DEFAULT

Установите для ForeignKey значение по умолчанию;значение по умолчанию для ForeignKey должно быть установлено.

...