我有两个型号。 sitesubnets和devicesubnets。
我想比较两个模型,这样我就可以创建两个列表。一个列表将具有匹配的子网,其中一个将具有不匹配的子网
我尝试使用设置差异,但由于它们是不同的模型,我认为它不起作用
测试查询:
sitesubnet_data = SiteSubnets.objects.filter(site_id=site_id)
devicesubnet_data = DeviceSubnets.objects.filter(device_id=device_id)
data = set(sitesubnet_data).difference(set(devicesubnet_data))
当我将sitesubnet_data与数据进行比较时,它们是相同的
我的模特:
class SiteSubnets(models.Model):
site = models.ForeignKey(SiteData, on_delete=models.CASCADE)
subnet = models.ForeignKey(Subnets, on_delete=models.CASCADE)
class Meta:
verbose_name = "Site Subnets"
verbose_name_plural = "Site Subnets"
unique_together = ('site', 'subnet',)
class DeviceSubnets(models.Model):
device = models.ForeignKey(DeviceData, on_delete=models.CASCADE)
subnet = models.ForeignKey(Subnets, on_delete=models.CASCADE)
class Meta:
verbose_name = "Device Subnets"
verbose_name_plural = "Device Subnets"
unique_together = ('device', 'subnet',)
答案 0 :(得分:1)
据我所知,我们只能比较相同的类对象(模型对象)。因此,您应该生成两个不同的Subnets
类查询集,这两个模型对于两个模型都是通用的。所以我为你的问题找到了一个可能的解决方案,即
devicesubnet = Subnets.objects.filter(devicesubnets__device_id=device_id)
sitesubnet = Subnets.objects.filter(sitesubnets__site_id=site_id)
common_subnets = list(set(devicesubnet) & set(sitesubnet))
此处common_subnets
将保留结果,其中包含Subnets
模型和SiteSubnets
模型的常见DeviceSubnets
个实例