Сохранение вычисленного значения из представления в модель в Django
У меня есть приложение Django, которое дает пользователю возможность сохранить расчет или нет в форме.
Если пользователь говорит, что хочет сохранить расчет, я хотел бы сохранить результат расчета в базе данных вместе с входными данными.
For the user input I am already able to save it. The challenge comes when saving the calculated results which are being handled by the views.py
.
Мой код приведен ниже:
для моего views.py
def coordinate_transform(request):
if request.method == 'POST':
form = CoordinateForm(request.POST)
if form.is_valid():
from_epsg = request.POST.get('from_epsg')
y = request.POST.get('y')
x = request.POST.get('x')
to_epsg = request.POST.get('to_epsg')
# Transform Coordinates
transformer = Transformer.from_crs(int(from_epsg), int(to_epsg))
transformed = transformer.transform(y, x)
# Save to Database?
save_data = request.POST.get('saved')
if save_data == 'on':
form.save()
messages.success(request, "Coordinate Transormation data stored")
context = {
'form': form,
'y': transformed[0],
'x': transformed[1],
}
return render(request, 'utility/coordinate_transform.html', context)
else:
form = CoordinateForm()
context = {
'form': form,
}
return render(request, 'utility/coordinate_transform.html', context)
In the above code, form.save()
is working fine but the calculation is not being saved. I tried using the Django Querysets to save the model and its not working.
Здесь находится мой model.py
class CoordinateTransform(models.Model):
from_epsg = models.ForeignKey(CRS, on_delete=models.CASCADE, related_name='from_epsg')
x = models.FloatField(verbose_name="X/Lon")
y = models.FloatField(verbose_name="Y/Lat")
to_epsg = models.ForeignKey(CRS, on_delete=models.CASCADE, related_name='to_epsg')
x_trans = models.FloatField(verbose_name='X-Transformed', null=True, blank=True)
y_trans = models.FloatField(verbose_name='Y-Transformed', null=True, blank=True)
stored_on = models.DateTimeField(auto_now_add=True)
и, наконец, форма, которую я использую для сбора пользовательского ввода из forms.py
class CoordinateForm(ModelForm):
# some widget stuff here
class Meta:
model = CoordinateTransform
fields = ('from_epsg', 'y', 'x', 'to_epsg')
Как лучше всего убедиться, что вычисления также сохраняются в базе данных?
Вы можете отложить сохранение объектов с помощью form.save(commit=False)
, а затем добавить вычисляемые поля следующим образом:
def coordinate_transform(request):
if request.method == 'POST':
form = CoordinateForm(request.POST)
if form.is_valid():
...
# Save to Database?
save_data = request.POST.get('saved')
if save_data == 'on':
instance = form.save(commit=False)
instance.x_trans = transformed[1]
instance.y_trans = transformed[0]
instance.save()
messages.success(request, "Coordinate Transormation data stored")