gpt4 book ai didi

python - 尝试从 Django ADMIN 中的外部用户模型调用 is_active 方法

转载 作者:行者123 更新时间:2023-12-01 09:28:33 25 4
gpt4 key购买 nike

这里我有一个禁止和取消禁止用户的函数。目前我可以在我的自定义用户模型中的 DjangoAdmin 中使用它。但我想做的是禁止用户使用 DjangoAdmin 中的 Profile 模型。

但我仍然在/admin/api/profile/处收到ERROR FieldDoesNotExist
配置文件没有名为“is_active”的字段
,因为 is_active 是用户模型的一个函数。我不知道如何禁止用户访问配置文件模型 View 管理员或如何将 is_active 连接到 Profile 模型。

#Banning Function
def ban_users(self, request, queryset):
queryset.update(is_active = False)
self.message_user(request, "User is banned and Email has been sent")

def remove_ban(self, request, queryset):
queryset.update(is_active = True)
self.message_user(request, "Users ban has been lifted")

#Admin functions will be created here,as well as registration of their specific models

class ReportAdmin(admin.ModelAdmin):
list_display = ('user_reported', 'report_reason', 'sent_by', 'session')
admin.site.register(Report, ReportAdmin)

class ProfileAdmin(admin.ModelAdmin):
list_display = ('user', 'birth_date', 'sessions_played', 'total_reports')
readonly_fields = (('sessions_played'),('birth_date'),('user'),('pref_server'),('teamwork_commends'),('skill_commends'),('sportsmanship_commends'),('communication_commends'),('discord_name'))#,'total_reports')
actions = ['ban', 'unban']
ban = ban_users
unban = remove_ban

def total_reports(self, obj):
return Report.objects.filter(user_reported=obj).count()

admin.site.register(Profile, ProfileAdmin)

class MyUserAdmin(UserAdmin):
list_display = ('username', 'first_name', 'last_name' , 'email')
readonly_fields = ('first_name' , ('last_name') , ('email') , ('username'))
actions = ['ban', 'unban']
ban = ban_users
unban = remove_ban
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)

最佳答案

操作函数假定查询集始终包含 User 对象,但由于您对 ProfileAdmin 使用相同的操作函数,因此它们还需要处理 配置文件对象。

def ban_users(self, request, queryset):
for obj in queryset:
if hasattr(obj, 'user'):
# This object is a Profile, so lookup the user
obj = obj.user
obj.is_active = False
obj.save()
self.message_user(request, "User is banned and Email has been sent")

请注意queryset.update()函数cannot be used to update columns on related models ,因此您不能执行 queryset.update(user__is_active = False)

关于python - 尝试从 Django ADMIN 中的外部用户模型调用 is_active 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50146009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com