Мне нужно сравнить два значения идентификатора, чтобы увидеть, совпадают ли они. В этой базе данных есть Области и Местоположения в них. Мне нужно проверить, какие места находятся в определенной области. Области имеют идентификатор в качестве первичного ключа, а местоположения имеют внешний ключ, указывающий на область.
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