これは初歩的かもしれませんが、私にとっては私のレベルを超えていることを証明しています. そして、私の感謝は前もって行きます。
私が達成したかったのは、クエリを実行しているデータの行であり、非アクティブな Liveroute テーブルのフィールドの値に基づいてクエリを実行した後、経度と緯度の値の 2 つのセット間の距離を計算する計算を実行することです。 hasersine 式を使用して、経度と緯度の 2 点間の距離を計算できます。しかし、この計算プロセスには時間がかかる可能性があり、テーブル内の行数が多いと時間通りにデータを表示できないことに注意してください。そこで、計算結果を別のテーブルに保存し、そのテーブルからデータを取り出して表示しようと考えました。
非アクティブになるテーブルの値に対して計算を実行します。以下は、Liveroute モデル クラスのルートで行がアクティブか非アクティブかを示す Django コードです。
class LiveRoutes(models.Model):
user = models.ForeignKey(User)
route = models.ForeignKey(UserRoutes)
status = models.ForeignKey(LiveRoutesStatus)
traveller = models.ManyToManyField(LiveRouteTravellers)
datetime = models.DateTimeField()
def __unicode__(self):
return self.route.__unicode__()
def isActive(self):
utc = pytz.utc
os.environ['TZ'] = 'UTC'
local = pytz.timezone("Asia/Calcutta")
now = utc.localize(datetime.datetime.today())
now = now.astimezone(local)
time_delta = (local.localize(self.datetime.replace(tzinfo=None)) + datetime.timedelta(minutes=self.route.journey_time_day)) - now
if time_delta.days == -1 and (24 - (time_delta.seconds / 3600)) <= 2:
return True
elif time_delta.days >= 0:
return True
else:
return False
isActive関数のこの値に基づいて、次のように計算を実行したかった
def carbonFootPrint(request):
if request.method != "GET":
raise Http404
routes = LiveRoutes.objects.all();
routeDetailArr = []
for lroute in routes:
routeDetail = dict()
if lroute.isActive() == False:
#Now I need to find out the start location and end location for the journey and the number of travellers.
routeDetail['travellers'] = lroute.traveller.all().count()
routeDetail['start_loc_lat']= lroute.route.start_location.latitude
routeDetail['start_loc_long'] = lroute.route.start_location.longitude
routeDetail ['end_loc_lat'] = lroute.route.end_location.latitude
routeDetail['end_loc_long'] = lroute.route.end_location.longitude
routeDetail['distance'] = haversine(start_loc_lat,start_loc_long,end_loc_lat,end_loc_long)
routeDetailArr.append(routeDetail)
私の問題は、このすべてのデータを別のテーブルに挿入して、後でそれらの値を取得できるようにする方法です。アドバイスをいただければ幸いです。