簡體   English   中英

django 使用 object_id 字段按對象注釋 qs

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM