鉴于django 1.8,python 2.7.5,postgresql和以下通用模型:
class restAPI(models.Model):
rest_id = models.CharField(max_length=20)
rest_host = models.CharField(max_length=20)
rest_mode = models.CharField(max_length=20)
rest_state = models.CharField(max_length=20)
class soapAPI(models.Model):
soap_id = models.CharField(max_length=20)
soap_host = models.CharField(max_length=20)
soap_asset = models.CharField(max_length=20)
soap_state = models.CharField(max_length=20)
在一个完美的世界soapAPI.soap_host
和restAPI.rest_host
将完美匹配。然而,这种情况很少发生。我试图找到并返回soapAPI中不存在于restAPI中的任何主机。我现在有一个工作方法,我使用python解析这些数据,然后将其保存到django中的自己的模型,但我必须相信我可以使用模型本身(我认为会更多)效率也很高。)
如何使用django提供的orm或使用soapAPI
返回soapAPI.soap_host
restAPI.rest_host
中.raw()
缺少__in
的整个模型,最好是与orm?任何和所有帮助将不胜感激,因为这对我来说是一次学习经历。提前谢谢。
EDIT1
完全开放模型关系作为某种形式的答案。
EDIT2
保持开放,因为我必须相信有比多个查询集更好的方法。
EDIT3
另外有办法做多种soapAPI
或其他什么吗?实际上,我需要返回soapAPI.soap_host
中缺少restAPI.rest_host
的整个soapAPI.soap_state
模型,而 {{1}}是' Live'。
答案 0 :(得分:0)
它应该是这样的:
rest_hosts = restAPI.objects.only("rest_host") excluded_rest_hosts = [host.rest_host for host in rest_hosts] missing_soap_hosts = soapAPI.objects.exclude(soap_host__in=excluded_rest_hosts)
希望这有帮助!
答案 1 :(得分:0)
考虑到@HassenPy给出的答案,这是我能想到的最好的结果:
excludehosts = restAPI.objects.values_list('rest_host', flat=True)
missinghosts = soapAPI.objects.exclude(soap_host__in=excludehosts)
修改强>
要回答我自己的编辑3,这是我能想到的最好的:
excludehosts = restAPI.objects.values_list('rest_host', flat=True)
missinghosts = soapAPI.objects.exclude(soap_host__in=excludehosts)
missinghosts.filter(soap_state='Live')
虽然以下方面也有效:
excludehosts = restAPI.objects.values_list('rest_host', flat=True)
soapAPI.objects.filter(soap_state='Live').exclude(soap_host__in=excludehosts)
不确定哪种技术更好,因为我无法真正辨别出返回时间的差异,但是嘿工作解决方案。