Django:将手动queryset附加到queryset对象

时间:2019-02-08 09:38:59

标签: django django-1.5

我正在使用 Django 1.5

我有一个表 MultiUser

class MultiUser(models.Model):
    user = models.ForeignKey(User, related_name='owner_user')
    shared_user = models.ForeignKey(User, related_name='shared_user')
    access_level = models.CharField(
        default='Viewer',  
        max_length='100', 
        blank=True
    )

此表在所有者用户下映射具有访问级别的用户。 user字段定义所有者用户,shared_user是映射的用户,可以是经理查看者

我已经定义了一个模型管理器方法来获取所有用户(包括所有者用户)的列表。

def getSharedUsers(self, user):
    # Get owner
    owner = None
    if self.filter(user=user).exists():
        owner = user
    elif self.filter(shared_user=user).exists():
        owner = self.filter(shared_user=user)[0]

    # Get all users
    shared_users = []
    if owner:
        shared_users = self.filter(user=owner)

    shared_users.append({
        'shared_user': owner,
        'access_level': 'OWNER',
        'created': owner.created
    })

    return shared_users

由于所有者用户未在 MultiUser 模型中定义access_level。我想手动将所有者用户追加到查询集列表中,并将shared_user字段设置为所有者用户,并将access_level设置为所有者

但这会导致错误

'QuerySet' object has no attribute 'append'

是否可以将手动生成的对象附加到queryset对象?如果是,怎么办?

2 个答案:

答案 0 :(得分:0)

您会看到重点在哪里。

# Get all users
shared_users = []
if owner:
    shared_users1 = self.filter(user=owner)

shared_users.append({
    'shared_user': owner,
    'access_level': 'OWNER',
    'created': owner.created
})

return shared_users

答案 1 :(得分:0)

在这里,当您使用shared_users = self.filter(user=owner)时,shared_users成为查询集。好吧,如果您想将所有者添加到查询集,可以这样做:

from itertools import chain

shared_users = list(chain(shared_users, [{
    'shared_user': owner,
    'access_level': 'OWNER',
    'created': owner.created
}])

但是不利的一面是,您将失去查询集的支持功能。因此,您需要像列表一样使用它。