亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

相關對象的 Django 查詢集

相關對象的 Django 查詢集

料青山看我應如是 2023-09-19 17:23:40
有以下型號:class Company(models.Model):    name = models.CharField(max_length=10)    class Department(models.Model):    name = models.CharField(max_length=10)    company = models.ForeignKeyField(to=Company)    persons = models.ManyToManyField(to=Person, on_delete=models.PROTECT)class Person(models.Model):    name = models.CharField(max_length=10)我想了解queryset一家公司的所有人員使用def persons_by_company(company_name):    l = []    for d in Department.objects.filter(company__name=company_name):        for p in d.persons:            l.append(p)    return l將會慢的確實返回列表而不是查詢集(不可過濾等)在這里獲取查詢集的方法是什么?
查看完整描述

2 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

就我而言,我認為這很簡單

Person.objects.filter(departement__company__id=company_id).distinct()

或使用公司名稱:

Person.objects.filter(departement__company__name__iexact=company_name).distinct()

你的函數將變成:

def persons_by_company(company_name):
    return Person.objects.filter(departement__company__name__iexact=company_name).distinct()

它返回一個查詢集并且速度更快。我用來iexact避免區分大小寫。

更新: .distinct()只是為了刪除重復的條目。


查看完整回答
反對 回復 2023-09-19
?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

首先,您必須將外鍵綁定到您的公司或部門


class Department(models.Model):

    name = models.CharField(max_length=10)

    company = models.ForeignKeyField(to=Company, related_name="department_company_key")


class Person(models.Model):

    name = models.CharField(max_length=10)

    person_department = models.ForeignKey(

        'Department',

        related_name="person_department_key"

        on_delete=models.CASCADE,

        blank=False,

        null=False

    )

然后在你的函數中:


def persons_by_company(company_name):

    l = []

    for d in Department.objects.filter(company__name=company_name):

        for p in d.person_department_key.all(): # You also apply some filter()

            l.append(p) # Remember This will append object  not  string or dictionary

    return l

不要忘記相關名稱必須是唯一的


查看完整回答
反對 回復 2023-09-19
  • 2 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號