2017-03-14 31 views
0

我正在過濾商店。我需要通過評級至門店進行排序,但該評級是由一個複雜的形態考慮,我可以通過一個字段進行排序,但如何爲每個算我不知道按公式排序

是當前版本爲了通過率

shops = shops.order_by('rate') 

但是你需要把公式而不是字段速率,這是如何完成的?

class Shop(models.Model): 
name = models.CharField(max_length=255, verbose_name=u'Название') 
time_begin = models.TimeField(max_length=255, 
           verbose_name=u'Время начала работы') 
time_end = models.TimeField(max_length=255, 
          verbose_name=u'Время окончания работы') 
phone = models.CharField(max_length=255, verbose_name=u'Телефон') 
preview = models.FileField(upload_to='files/shop/preview') 
delivery_price = models.IntegerField(verbose_name=u'Стоимость доставки') 
min_price = models.IntegerField(verbose_name=u'Мин доставка', null=True) 
min_order = models.IntegerField(verbose_name=u'Минимальный заказ') 
del_wait_time = models.IntegerField(verbose_name=u'Время доставки минут') 
is_always = models.BooleanField(verbose_name=u'Круглосуточно?', 
           default=True, blank=True) 
is_cash = models.BooleanField(verbose_name=u'Наличными', 
           default=True, blank=True) 
is_card = models.BooleanField(verbose_name=u'Картой курьеру', 
           default=True, blank=True) 
is_online = models.BooleanField(verbose_name=u'Онлайн-оплата', 
           default=True, blank=True) 
is_points = models.BooleanField(verbose_name=u'Еда за баллы', 
           default=True, blank=True) 
is_sale = models.BooleanField(verbose_name=u'Акция', 
           default=True, blank=True) 
is_new = models.BooleanField(verbose_name=u'Новый магазин', 
           default=True, blank=True) 
notification = models.CharField(max_length=255, 
           verbose_name=u'Важное уведомление', 
           blank=True, null=True) 
email = models.CharField(max_length=255, verbose_name=u'E-mail') 
review_email = models.CharField(max_length=255, 
           verbose_name=u'Review E-mail', 
           default='null') 
rate = models.FloatField(max_length=255, verbose_name=u'Рейтинг') 
destination = models.CharField(max_length=255, 
           verbose_name=u'Местоположение') 
specific = models.CharField(max_length=255, default='', 
          verbose_name=u'Специализация ресторана') 
description = models.TextField(max_length=3000, 
           verbose_name=u'Описание') 
cook = models.CharField(max_length=255, verbose_name=u'Имя повара', 
         blank=True, null=True) 
image_cook = models.FileField(upload_to='files/shop/cook', 
           blank=True, null=True) 
desc_cook = models.TextField(max_length=3000, 
          verbose_name=u'Описание повара', 
          blank=True, null=True) 
shoptype = models.ForeignKey(ShopType, verbose_name=u'Тип заведения', 
          related_name="shop") 
slider = models.ManyToManyField(Slider, verbose_name=u'Слайдер', 
           related_name="slider", 
           blank=True) 
kitchen = models.ManyToManyField(Kitchen) 
+0

請提供更多詳細信息,包括型號字段和公式 –

+0

計算公式,因爲所有商店的訂單總數除以商店訂單數乘以商店評分 –

+0

我應該假設存在有一個ForeignKey指向'Shop'的Order類? –

回答

1

由於缺乏更詳細的問題陳述,我會給出一個模糊的答案。 (如果顯示更多細節,請填寫)

您可以通過使用計算值對查詢集進行註釋來完成此操作。請參閱文檔here

這意味着您將要求數據庫計算出「費率」,例如通過將每家商店的距離除以其時間,並將該值添加到爲每個商店返回的數據中店。然後,您可以根據該字段執行order_by。