2014-11-03 99 views
0

我正在做一个管理操作,试图获取Request_Invite的关联用户并将其标记为活动。Django管理操作:'QuerySet'对象没有'user'属性

这里是我的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在管理操作功能。

回答

1

这是行不通的吗?

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

不,我得到:“用户”对象有没有属性“更新” – ApathyBear 2014-11-03 09:36:13

+0

我固定我的答案。您可以再试一次 – ZZY 2014-11-03 13:46:40

+0

虽然这不会引发错误,但不一定可行:https://app.box.com/s/lsyotuafv878lic1mkul – ApathyBear 2014-11-03 20:30:47

0

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

完整的答案是这样的:

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

因为'is_active'是models.User(https:/ /docs.djangoproject.com/en/dev/ref/contrib/auth/#django.contrib.auth.models.User),而'active'则不是。代码看起来很简单,所以我只是输入了直觉的答案,这些答案在我的脑海中没有经过测试。对不起,错误 – ZZY 2014-11-04 02:08:54

相关问题