Добавление вошедшего в систему пользователя в модели django во время создания и неудачного удаления - PullRequest
0 голосов
/ 25 февраля 2019

В моем приложении две модели Django.Модель проекта и другая модель для регистрации создания или удаления проектов.Когда проект создается, я хотел бы заполнить поле created_by в модели проектов текущим вошедшим пользователем и в то же время создать экземпляр модели регистратора с source, являющимся тем же вошедшим пользователем..

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

Моя модель проекта ...

class Projects(models.Model):
   title = models.CharField(max_length=40)
   description = models.TextField()
   budget = models.PositiveIntegerField()
   created_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL)

@receiver(post_save, sender=Projects, dispatch_uid="update_logs")
def update_logs(sender, **kwargs):
   instance = kwargs['instance']
   created = kwargs['created']
   if created:
      log_title = 'Project creation'
      comments = f'Project "{instance.title}" with a budget of ${instance.budget} was added'
      Logger.objects.create(title=log_title, comments=comments, source=instance.created_by)
   else:
      instance.save()

@receiver(post_delete, sender=Projects, dispatch_uid="update_logs_deletion")
def update_logs_deletion(sender, **kwargs):
   instance = kwargs['instance']
   log_title = 'Project deleted'
   comments = f'Project "{instance.title}" with a budget of ${instance.budget} was deleted'
   Logger.objects.create(title=log_title, comments=comments)

Моя модель Logger ...

class Logger(models.Model):
   title = models.CharField(max_length=40)
   comments = models.TextField()
   source = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL)

Внутри файла admin.py у меня есть следующее ...

class ProjectsAdmin(admin.ModelAdmin):
   def save_model(self, request, obj, form, change):
      if not obj.pk:
         obj.created_by = request.user
      super().save_model(request, obj, form, change)

class LoggerAdmin(admin.ModelAdmin):
   def save_model(self, request, obj, form, change):
      if not obj.pk:
         obj.source = request.user
      super().save_model(request, obj, form, change)

У меня есть эта структура модели для нескольких моделей.Иногда при создании поле created_by в модели Projects заполняется, а регистратор source - нет.Иногда поле created_by не заполняется, а source в регистраторе.При удалении source никогда не заполняется. Я не получаю.

...