好的,有沒有辦法來過濾對象,以便您只能獲取關聯記錄的記錄。也許它是一個正確的連接?Django查詢關係行爲
基本上,我只想從A中選擇記錄,B有一個外鍵,同時在B上使用WHERE子句。是不是讓它聽起來比它更復雜?我不需要B的記錄,只需要A;也許是一個子查詢?
我對Django的查詢比較陌生,我只是做了一些簡單的事情。
好的,有沒有辦法來過濾對象,以便您只能獲取關聯記錄的記錄。也許它是一個正確的連接?Django查詢關係行爲
基本上,我只想從A中選擇記錄,B有一個外鍵,同時在B上使用WHERE子句。是不是讓它聽起來比它更復雜?我不需要B的記錄,只需要A;也許是一個子查詢?
我對Django的查詢比較陌生,我只是做了一些簡單的事情。
你的問題有點含糊,但如果我理解正確,它的工作是這樣的:
class A(models.Model):
pass
class B(models.Model):
a = models.ForeignKey(A)
some_field = models.IntegerField()
a.filter(b__some_field=5).distinct()
這JOINs
上b
的some_field
兩個表和篩選器。然後distinct()
確保只返回唯一的a
。請參閱lookups that span relationships上的文檔。
我的解決方案比我最初想象的要簡單得多。我不知道你可以很容易地過濾相關的模型。以下是我最終得到的結果:
class A(models.Model):
pass
class B(models.Model):
a = models.ForeignKey(A)
location = models.ForeignKey(Location)
a.filter(b__location=request.user.profile.location)
你會舉一個指定的例子嗎? –
過濾對象A,以便它只獲取與B和B有關的記錄是帶有外鍵的模型A – Callum
有兩種方法可以做到這一點(儘管我無法完全記得第二個)。簡單的方法是做A.objects.filter(id__in = B.objects.filter(你的自定義過濾器).values_list('a',flat = True))。這是一種子查詢。我會嘗試回憶第二種方式。 –