【发布时间】:2018-08-15 03:13:10
【问题描述】:
假设我有以下模型 -
class Banana(models.Model):
name = models.CharField(max_length=255)
def get_banana(self):
return f'Banana: {self.name}'
现在我想在这个get_banana 方法中添加一个每当方法启动和成功结束时都会生成日志的记录器。
记录器如下-
class Log(models.Model):
type = models.CharField(max_length=255)
message = models.CharField(max_length=255)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey()
所以我创建了一个记录器装饰器 -
def log_status(f):
def wrapper(**fields):
Log.objects.create(**{k: (v if k != 'message' else v + ':STARTED') for k, v in fields.items()})
return_value = f()
Log.objects.create(**{k: (v if k != 'message' else v + ':COMPLETED') for k, v in fields.items()})
return return_value
return wrapper
如何将此装饰器添加到我的 get_banana 方法中?
以下不起作用,因为它看不到self。
@log_status(type='info', message='Get Banana.', content_object=self)
def get_banana(self):
return f'Banana: {self.state}'
【问题讨论】:
标签: python django model decorator