问题描述
想比较(如果相同或不相同)“地图”模型的“ 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,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'
我想从值等于Uni的uni_id的地图模型中过滤map_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 对象不存在,则最终将得到None
值在您的 obj_map 字段中。使用if obj_map:
执行进一步的计算。
注意::对于Python中的类名称,请使用大写约定。将class map(models.Model)
更改为class Map(models.Model)
。顺便说一句,我不知道该代码的用例是什么,但是比较两个不同模型的唯一ID根本不安全(例如,如果ID字段是自动生成的)。我也不确定您为什么要使用db_table
,所以在示例中不加赘述。