如何比较Django查询集中不同模型的两个字段?

如何比较Django查询集中不同模型的两个字段?,django,django-views,django-queryset,django-filter,django-aggregation,Django,Django Views,Django Queryset,Django Filter,Django Aggregation,要将“map”模型的“map_id”与“uni”模型的“uni_id”进行比较(如果它们相同或不相同),请返回。注:模型map和Uni也位于不同的数据库中 以下是两种模式: class map(models.Model): job_id = models.AutoField(db_column='job_id', primary_key=True) company = models.CharField(max_length=255, blank=True, null

要将“map”模型的“map_id”与“uni”模型的“uni_id”进行比较(如果它们相同或不相同),请返回。注:模型map和Uni也位于不同的数据库中

以下是两种模式:

 class map(models.Model):
       job_id = models.AutoField(db_column='job_id', primary_key=True)
       company = models.CharField(max_length=255, blank=True, null=True)
       map_id = models.CharField(db_column='Map_ID', max_length=255, blank=True, null=True)
      
       class Meta:
             managed = True
             db_table = 'Map'


  class Uni(models.Model):
        uni_id = models.BigAutoField(db_column='Uni_ID', primary_key=True)  
        comp_name = models.TextField(blank=True, null=True)
        name = models.TextField(blank=True, null=True)

        class Meta:
              managed = True
              db_table = 'Uni'
我想从映射模型中筛选映射id,该映射模型的值等于uni中的uni id。 下面是我尝试的代码:

   obj_map = map.objects.using("Map").filter(map_id=pk).filter(map_id__in=F('uni_id'))

你可以这样说:

obj_map = map.objects.filter(map_id=pk) if Uni.objects.filter(uni_id=pk).exists() else None
这将检查具有该id值的Uni对象是否存在,如果存在,则将尝试查找具有该id的map对象。如果Uni对象不存在,或者存在,但具有该id的map对象不存在,在obj_map字段中,您将得到
None
值。如果obj\U map:执行进一步的计算,请使用



注意:请对Python中的类名使用大写约定。将
类映射(models.Model)
更改为
类映射(models.Model)
。顺便说一句,我不知道这段代码的用例是什么,但是比较两个不同模型的唯一id是不安全的(例如,如果id字段是自动生成的)。我也不知道你为什么要使用
db_表
,所以我把它排除在示例之外。

Hi@Aleksandar Mijatović谢谢你的回答,反正我解决了我的问题。关于python类的名称,在我的代码中是大写的,我刚刚在这里发布了演示代码,这就是为什么类名称是小写的。很高兴听到你们解决了这个问题!无论如何,如果你认为这个答案有帮助,请投赞成票或绿色勾号。