如何覆盖管理页面中的save()方法



这看起来可能是一个简单的问题,但我已经挣扎了好几个星期了,我想覆盖管理页面中的保存方法,对于我创建的模型名称Transaction,我想按组pre_save每个事务。

举个例子,我创建了两个组(Test1,Test2(,并将用户分配给每个组,然后Test1组中的一个用户进行了交易并保存了它

我希望Test1组的所有用户都能看到并修改事务,但不希望Test2组的成员看到。我覆盖了save方法和queryset方法,但它仍然不起作用。有什么想法吗?这是我的代码型号.py

class Transaction(models.Model):
income_period_choices = (('Weekly', 'Weekly'), ('Fortnightly',
'Fortnightly'))
chp_reference = models.CharField(max_length=50, unique=True)
rent_effective_date = models.DateField(null=True, blank=True)
income_period = models.CharField(max_length=11,
choices=income_period_choices,
null=True,
blank=True)
property_market_rent = models.DecimalField(help_text='Weekly',
max_digits=7,
decimal_places=2,
null=True,
blank=True)

管理员.py

class TransactionAdmin(admin.ModelAdmin):
search_fields = ['chp_reference','familymember__name']
inlines = [FamilyGroupInline,FamilyMemberInline]
def save_model(self, request, obj, form, change):
obj.user = request.user
super().save_model(request, obj, form, change)
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser
return qs
return qs.filter(group__in=request.user.groups.all())

然而,我试图保存一个事务,例如作为Test1组的用户登录,我仍然看不到该事务或任何其他事务,但作为超级用户,我可以访问所有事务。每次我尝试添加新事务时,都会出现一段消息:摘录

您可以使用装饰器:

def hello(function):
function()
print('hello')
@hello
def dog():
print('woof!')

这就像运行hello(dog)。运行此脚本打印:

woof!
hello

因此,您可以编写一个pre_save装饰器来代替hello,它可以做任何您需要的事情!

这里有更多关于装饰师的信息。

最新更新