第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

相關(guān)對象的 Django 查詢集

相關(guān)對象的 Django 查詢集

有以下型號: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貢獻(xiàn)1818條經(jīng)驗 獲得超8個贊

就我而言,我認(rèn)為這很簡單

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

或使用公司名稱:

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

你的函數(shù)將變成:

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

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

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


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

TA貢獻(xiàn)1796條經(jīng)驗 獲得超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

    )

然后在你的函數(shù)中:


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

不要忘記相關(guān)名稱必須是唯一的


查看完整回答
反對 回復(fù) 2023-09-19
  • 2 回答
  • 0 關(guān)注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號