Как получить значение отложенного атрибута? - PullRequest
0 голосов
/ 25 апреля 2019

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

    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

1 Ответ

0 голосов
/ 25 апреля 2019

Вы можете проверить по 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...