我需要比较两个ID值以查看它们是否匹配。在此数据库中,有区域和位置。我需要检查哪些位置在特定区域内。区域具有ID作为主键,位置中具有指向区域的外键。
if obj.area.id == self.id:
由于某种原因,外键始终返回正确的值,而self.id(在Area类中)始终返回<django.db.models.query_utils.DeferredAttribute object at 0x03506B70>
。我已经尝试过Area.id,Area.pk,Area._get_pk_val以及所有使用self而不是Area的东西。如何从延迟属性中提取值?
class Area(models.Model):
id = models.IntegerField(default=0, primary_key=True)
name = models.CharField(max_length=30)
longitude = models.FloatField(default=0)
latitude = models.FloatField(default=0)
def __str__(self):
return self.name
def number_of_locations(self):
count=0
measurements.objects
for obj in Location.objects.all():
print (str(obj.area.id)+" vs "+str(self.id))
if obj.area.id == self.id:
print("check")
count+=1
return count
编辑:终于使它工作了。现在,它检查所有区域,而不是当前所在的区域,并返回所有位置数量的数组。这不是我最初打算的,但可以使用。
def number_of_locations(self):
count_array = []
count=0
for a in Area.objects.all():
for obj in Location.objects.all():
#print (str(obj.area.id)+" vs "+str(a.id))
if obj.area.id == a.id:
print("check")
count+=1
count_array.append(count)
count=0
return count_array
答案 0 :(得分:0)
您可以通过exists()
进行检查。如果该项目存在于模型中,它将返回true
试试这个
def number_of_locations(self):
count = 0
for obj in Location.objects.all():
print(str(obj.area.id) + " vs " + str(self.id))
if obj.area.id == Area.objects.filter(pk=obj.area.id).values_list('pk', flat=True).first():
print("check")
count += 1
return count