簡體   English   中英

Django:返回匹配和不匹配的記錄

[英]Django: Return matching and non-matching records

我正在嘗試使用現有的Django功能/命令實現OUTER JOIN功能。

我有這個模型:

class ClinicDoctor(models.Model):
    doctor = models.ForeignKey('User', related_name='doctorsF') # single quotes (') because User table is defined down the code.
    clinic = models.ForeignKey(Clinic, related_name='clinicsF')

class User(AbstractUser):
    clinics = models.ManyToManyField(Clinic, through='ClinicDoctor', related_name='doctors')

我需要獲得所有醫生及其相關診所的清單。 如果他們有與他們相關的診所,我就能得到清單。 但是我無法讓那些沒有診所與之聯系的醫生。

我嘗試了這個:

doctorsQuerySet = ClinicDoctor.objects.filter(doctor__groups__name='Doctor').distinct()

它不起作用,因為它確實可以進行INNER JOIN

該查詢將給我所有醫生。 但是我不知道誰去找所有的醫生,而不論診所協會如何。

doctorsQuerySet = User.objects.filter(groups__name='Doctor').order_by('full_name')

如果有醫生,我必須和醫生一起去診所看。 它的功能似乎類似於OUTER JOIN 我們如何在Django中做到這一點?

謝謝。

如果您將醫生定義為分配給“醫生”組的用戶,則第一個查詢是正確的:

doctorsQuerySet = User.objects.filter(groups__name='Doctor').order_by('full_name')

通過使用循環,您現在可以控制每個用戶並讀取與診所有關的數據。

for doctor in doctorsQuerySet:
    clinics = doctor.clinics.all()

由於這將在每次迭代中引起其他查詢,因此您應考慮在查詢中使用預取:

doctorsQuerySet = User.objects.filter(groups__name='Doctor').prefetch_related('clinics').order_by('full_name')

希望這可以幫助 :)

暫無
暫無

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

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