Не удается преобразовать ключевое слово «distance_gte» в поле. Возможные варианты: Shop_category, адрес, расстояние, идентификатор, имя, shop_location, пользователь, user_id.

У меня есть два модельных магазина и клиент

магазин

class Shop(models.Model):
     address = models.CharField(max_length=70, null=True)
    Shop_category = models.CharField(max_length=200, null=True, ) 
    Name=models.CharField(max_length=70)
     distance = models.PositiveIntegerField(null=True)
     shop_location = models.PointField(null=True, default=Point(28.49, 77.33))

покупатель

class Customer(models.Model):
        user = models.OneToOneField(User, null=True, 
           on_delete=models.CASCADE)
    customer_location = models.PointField(null=True, default=Point(28.49, 77.33))

Я хочу установить фильтр на магазин. Магазин покажет покупателю, если расстояние между магазином и покупателем меньше расстояния, указанного в shop.distance и my views.py.

from django.contrib.gis.db.models.functions import Distance
  Shop_list = Shop.objects.filter(
    distance_gte=Distance('shop_location',    
    request.user.customer.customer_location)
)

Я получаю сообщение об ошибке Не удается преобразовать ключевое слово «distance_gte» в поле. Возможные варианты: Shop_category, адрес, расстояние, идентификатор, имя, shop_location, пользователь, user_id.


person Sarthak tiwari    schedule 12.06.2020    source источник
comment
Что именно делает поле distance в поле Shop? Это расстояние до чего?   -  person Willem Van Onsem    schedule 12.06.2020
comment
расстояние, заданное магазином, на котором я покажу покупателю   -  person Sarthak tiwari    schedule 12.06.2020
comment
но это не данные, специфичные для Shop, и это не данные, которые должны сохраняться.   -  person Willem Van Onsem    schedule 12.06.2020
comment
Как я могу это сделать? Если я хочу распечатать весь магазин для тех клиентов, которые находятся на расстоянии, указанном в магазине   -  person Sarthak tiwari    schedule 12.06.2020
comment
У меня есть больше данных в магазине, но я не считаю нужным писать, я написал то, что необходимо   -  person Sarthak tiwari    schedule 12.06.2020
comment
я имею в виду, что нет смысла хранить distance в поле, так как оно отличается для каждой комбинации пользователя/магазина.   -  person Willem Van Onsem    schedule 12.06.2020
comment
вы можете указать, как вы получаете объект Customer? Итак, связанные Customer для данного пользователя?   -  person Willem Van Onsem    schedule 12.06.2020
comment
Я поместил отношение в модель user = models.OneToOneField(User, null=True, on_delete=models.CASCADE) и указал пользователя в представлении distance_gte=Distance('shop_location', request.user.customer.customer_location), тогда ошибка Не удается преобразовать ключевое слово 'distance_gte' в поле. Варианты: адрес, расстояние, идентификатор, имя, заказ, продукт, расположение магазина, пользователь, идентификатор_пользователя @WillemVanOnsem   -  person Sarthak tiwari    schedule 13.06.2020


Ответы (1)


Вам нужно использовать двойное подчеркивание для поиска, поэтому:

from django.contrib.gis.db.models.functions import Distance

Shop_list = Shop.objects.filter(
    distance__gte=Distance(
        'shop_location',    
        request.user.customer.customer_location
    )
)
person Willem Van Onsem    schedule 13.06.2020
comment
@alltypenews: Вы делите это на тысячу, так что Distance(..)/1000. - person Willem Van Onsem; 18.06.2020
comment
пожалуйста, помогите мне с этим моим вопросом, если у вас есть любое другое предложение, то дайте мне, пожалуйста, я прошу вас - person Sarthak tiwari; 20.06.2020