【问题标题】:Django Admin Action: 'QuerySet' object has no attribute 'user'Django 管理操作:'QuerySet' 对象没有属性'user'
【发布时间】:2014-12-29 17:56:14
【问题描述】:

我正在执行一项管理操作,试图获取 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

【问题讨论】:

    标签: python django django-models django-admin django-queryset


    【解决方案1】:

    这行得通吗?

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

    【讨论】:

    【解决方案2】:

    ZZY 的回答是对的,他应该值得称赞,但我不知道用户的属性必须是is_active 而不是active。根据问题本身,我假设他也不知道。

    完整的答案如下所示:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2016-10-01
    • 2021-08-05
    • 2017-06-22
    • 2013-05-10
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多