首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:将手动查询集附加到queryset对象

Django:将手动查询集附加到queryset对象
EN

Stack Overflow用户
提问于 2019-02-08 09:38:58
回答 2查看 700关注 0票数 0

我使用的是Django 1.5

我有一张MultiUser

代码语言:javascript
复制
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是映射用户,可以是管理器查看器

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

代码语言:javascript
复制
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模型中没有定义任何MultiUser。我希望手动将所有者用户添加到queryset列表中,将shared_user字段设置为所有者用户,并将access_level设置为所有者

但这会产生错误,因为

代码语言:javascript
复制
'QuerySet' object has no attribute 'append'

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-08 09:54:32

在这里,当您使用shared_users = self.filter(user=owner)时,shared_users变成了一个查询集。如果您想将所有者附加到查询集中,您可以这样做:

代码语言:javascript
复制
from itertools import chain

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

但不利的一面是,您将失去对查询集的支持功能。所以你需要把它当作一个列表来使用。

票数 0
EN

Stack Overflow用户

发布于 2019-02-08 09:51:08

你知道这有什么意义。

代码语言:javascript
复制
# 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54589523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档