2013-08-01 2 views
0

I이 모델 장고 업데이트는 플로트 필요

class Data(models.Model): 
    a = models.CharField() 
    b = models.IntegerField() 
    c = models.IntegerField() 
    d = models.IntegerField() 
    e = models.IntegerField() 
    f = models.IntegerField() 
    x = models.Decimalfield(max_digits=10, decimal_places=3) 
    y = models.Decimalfield(max_digits=10, decimal_places=3) 

이제 식으로 각 행에 대해 필드 X 및 Y를 갱신해야

:

x = 100 * b + (c/log(d*e)) + e^2*f 
y = 100 * b + (c*log(d/e)) + e^2/f 

나는 어떻게 해야할지 모르겠다. 장고 F를 사용하면, x & y는 b, c, d, e, f가 int 인 곳의 데이터로 저장된다. 로부터 장고 F()로

+0

어떻게 입력을 받고 있습니까? –

+0

그래서 처음으로 나는 csv/exel을 입력하여 a, b, c, d, e, f를 업로드하고 그 가중치는 100이 아닌 변수 만 변경할 수 있습니다. 예를 들어 w1은 200 또는 300 일 수 있습니다 ... 실제 수식은 다음과 같습니다. , x = w1 * b + (c/log (d * e)) + e^2 * f 일 때, w1은 업데이트시 사용자가 특정하게됩니다. – Roshan

답변

1

을 수학 함수를 사용 documentation :

장고 F와 덧셈, 뺄셈, 곱셈, 나눗셈 및 모듈로 연산()의 사용을 목적 지원 , 상수 모두 및 다른 F() 객체와 함께.

로그는 지원되는 작업이 아니므로 log(d*e)을 업데이트 호출로 가져올 방법이 없습니다. 파이썬에서는 어떤 시점에서 또는 direct SQL update을 사용해야합니다. 또는 LOG(d)LOG(e)을 포함하는 데이터베이스보기를 기본 테이블 대신 열로 사용하십시오.

Data.objects.update(x=(F('b') * 100 + F('e') * F('e') * F('f')), y=(F('b') + (F('e') * F('e'))/F('f')) 

내가 그 대수없이 큰 도움이되지 않는다는 것을 이해하지만, 나는 F 객체에 대한 연산의 사용을 보여주기 위해 포함하고 있습니다 :

그 나머지는 당신이 할 수 있습니다.