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