Django管理操作:'QuerySet'对象没有'用户'属性

0 投票
2 回答
1760 浏览
提问于 2025-05-01 05:53

我正在做一个管理员操作,目的是把一个请求邀请(Request_Invite)关联的用户标记为“活跃”。

这是我的 Admin.py 文件:

def activate_user(modeladmin, reqeust, queryset):
    queryset.user.update(active=True)
    queryset.update(accepted=True)
activate_user.short_description = "Mark User as Active"

class Request_InviteAdmin(admin.ModelAdmin):
    list_display = ['user', 'accepted']
    ordering = ['user']
    actions = [activate_user]
    class Meta:
        model = Request_Invite

admin.site.register(Request_Invite, Request_InviteAdmin)

这是我的 Models.py 文件:

from django.contrib.auth.models import User
class Request_Invite(models.Model):
    user = models.OneToOneField(User)
    accepted = models.BooleanField(default=False)

    def __unicode__(self):
        return u"%s's request" % (self.user)

当我在管理员后台尝试运行这个操作时,出现了一个错误:

'QuerySet' object has no attribute 'user'

这个错误指向了这一行 queryset.user.update(active=True)

我现在很难弄明白怎么正确地查询到这个关联的 user,并在管理员操作函数中把它标记为 active

暂无标签

2 个回答

0

ZZY的回答是对的,他应该得到认可,但我不知道用户的属性应该是 is_active 而不是 active。我猜他也不知道这一点,因为从问题本身来看。

完整的答案应该是这样的:

for q in queryset:
    q.user.is_active = True
    q.user.save()
queryset.update(accepted=True)
1

这个可以用吗?

for q in queryset:
    q.user.is_active = True
    q.user.save()
queryset.update(accepted=True)

撰写回答