簡體   English   中英

如何在Django中過濾相關字段?

[英]How can I filter related field in django?

說我有一個與模型公司有多對多關系的用戶模型; 以及模型UserType,它同時連接到User和Company。 像這樣:

class User(models.Model):
    name = models.TextField()

class Company(models.Model):
    name = models.TextField()
    users = models.ManyToManyField(User, related_name="companies")

class UserType(models.Model):
    name = models.TextField()
    company = models.ForeignKey(Company, related_name="user_types")
    users = models.ManyToManyField(User, related_name="user_types")

我想找到公司中的所有用戶,這很簡單: User.objects.filter(companies=some_company) 但是,我也想在返回的用戶對象上過濾user_types字段,以便僅返回連接到給定Company的UserType對象。 為了用代碼解釋它,它應該返回true:

def check_user_types(users, company):
    for user in users:
        for user_type in user.user_types:
            if user_type.company != company:
                return false
    return true

我該怎么做?

我想到了。 對於任何面臨相同問題的人,這可以解決它:

from django.db.models import Prefetch

users = User.objects.filter(companies=company).prefetch_related(
    Prefetch(
        "user_types",
        queryset=UserType.objects.filter(company=company),
    )
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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