Django:将手动查询集附加到查询集对象
Django: append manual queryset to queryset object
我正在使用 Django 1.5。
我有一个 table 多用户
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
)
此 table 将访问级别映射到所有者用户下。 user
字段定义所有者用户,shared_user
是映射用户,可以是 manager 或 viewer
我已经定义了一个模型管理器方法来获取包括所有者用户在内的所有用户的列表。
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
为 owner.
但这会给出错误
'QuerySet' object has no attribute 'append'
是否可以将手动生成的对象附加到查询集对象?如果是怎么办?
你看这个重点在哪里
# 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
此处当您使用 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
}])
但缺点是,您将失去查询集的支持功能。所以你需要像列表一样使用它。
我正在使用 Django 1.5。
我有一个 table 多用户
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
)
此 table 将访问级别映射到所有者用户下。 user
字段定义所有者用户,shared_user
是映射用户,可以是 manager 或 viewer
我已经定义了一个模型管理器方法来获取包括所有者用户在内的所有用户的列表。
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
为 owner.
但这会给出错误
'QuerySet' object has no attribute 'append'
是否可以将手动生成的对象附加到查询集对象?如果是怎么办?
你看这个重点在哪里
# 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
此处当您使用 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
}])
但缺点是,您将失去查询集的支持功能。所以你需要像列表一样使用它。