![](/img/trans.png)
[英]Using django 1.8 duration field to annotate a set of django objects
[英]django annotate qs by objects using object_id field
得到用戶和角色。 我怎樣才能得到用戶注釋的角色 qs?
from django.db import models, F, Q
class User(models.Model):
pass
class Role(models.Model):
...
user_id = models.PositiveIntegerField(
verbose_name='Related object ID'
)
我想做這樣的事情:
roles = Role.objects.all()
roles = roles.annotate(user=Q(User.objects.get(id=F('user_id'))))
for role in roles:
print(role.user.id) => 123
追溯:
FieldError: Cannot resolve keyword 'user_id' into field
PS:我這里不需要 ForeignKey 或 ManytoMany,我需要的正是這種關系。
您在問題中提到的解決方案在這里不起作用,因為F(...)
查詢指向用戶 model 本身,而不是角色 model。因此它無法解析該字段。
另外,我會推薦@Iain 在評論部分提到的內容,因為這樣您可以直接從角色 object 訪問用戶 object。您可以為此考慮OneToOne關系。
另一方面,如果您不想在模型中建立關系,那么充其量您可以像這樣訪問用戶 model 中的一個字段(使用子查詢):
from django.db.models import OuterRef, Subquery
roles = roles.annotate(username=Subquery(User.objects.filter(id=OuterRef('user_id')).values('username')[:1]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.