我在Django中设置了这些模型:
class SourceBusiness(models.Model):
source = models.CharField(max_length=100)
...(other fields)
class ResultBusiness(models.Model):
sourcebusiness = models.ForeignKey(SourceBusiness)
...(other fields)
我想获得ResultBusiness表中存在哪些对象的不同来源列表。例如,对于以下数据,
a = SourceBusiness(source="A")
a1 = SourceBusiness(source="A")
b = SourceBusiness(source="B")
c = SourceBusiness(source="C")
x = ResultBusiness(sourcebusiness=a)
y = ResultBusiness(sourcebusiness=a1)
z = ResultBusiness(sourcebusiness=c)
我想找到源a,a1和c的ResultBusinesses,并且这些SourceBusinesses的源是“A”和“C”。理想情况下,我想一步到位[“A”,“C”]。这是否可以使用Django QuerySet API?
如果不是直截了当我可以解决,只想知道是否可以一步完成。
编辑:只是为了澄清,[“A”,“C”]是我想要的结果,而不是输入。因此,不是“哪个ResultBusiness来源于[A,C]中包含源的SourceBusiness”,而是“对于存在的所有ResultBusinesses,其父源SourceBusiness.source的可能值是什么”
答案 0 :(得分:3)
results = SourceBusiness.objects.filter(resultbusiness__isnull=False).distinct().values_list('source', flat=True)
答案 1 :(得分:1)
RB=ResultBusiness.objects.exclude(sourcebusiness__isnull=True).values_list('sourcebusiness__source',flat=True).distinct()
这是一步到位的事。
假设:ForeignKey可以是null=True
答案 2 :(得分:1)
阅读https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects主题,了解如何进行此类查询。
你应该这样做:
from django.db.models import Q
q = ResultBusiness.objects.filter(
Q(sourcebusiness__source="A")|Q(sourcebusiness__source="C")
)