#django #django-forms
#django #django-forms
Вопрос:
Я пытаюсь передать данные из формы в зависимости от различных вычислений из формы отправки
Полная модель
from django.db import models
from datetime import datetime, date
# Create your models here.
year_choice = [
('year1','1-Year'),
('year3','3-Year')
]
weeksinyear = 52
hours = 6.5
class AdminData(models.Model):
year1 = models.IntegerField()
year3 = models.IntegerField()
@property
def day_rate_year1(self):
return self.year1 / weeksinyear / hours
@property
def day_rate_year3(self):
return self.year3 / weeksinyear / hours
class Price(models.Model):
name = models.CharField(max_length=100)
contract = models.CharField(max_length=5, choices=year_choice)
start_date = models.DateField(default=datetime.now)
end_date = models.DateField(default=datetime(2021,3,31))
epoch_year = date.today().year
year_start = date(epoch_year, 1, 4)
year_end = date(epoch_year, 3 , 31)
def __str__(self):
return self.name
@property
def pricing(self):
price_days = self.start_date - self.year_end
return price_days
Число просмотров
def price_detail(request):
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = PriceForm(request.POST)
# check whether it's valid:
if form.is_valid():
form.save()
return render(request,'confirmation.html',{'form_data': form.cleaned_data})
else:
form = PriceForm()
return render(request, 'main.html', {'form': form})
Итак, идея состоит в том, чтобы изменить отображение деталей на confirmation.html страница в зависимости от типа контракта и даты начала, ниже приведен простой, но наиболее похожий на неправильный пример:
def pricingcalc(request):
if PriceForm.contract == 'year1'
return Price.pricing * AdminData.day_rate_year1
else
return Price.pricing * AdminData.day_rate_year3
Подводя итог:
- Вывод списка значений на странице подтверждения
- Вывод на основе количества дней x цены в зависимости от годового контракта или трехлетнего контракта.
Надеюсь, это имеет смысл.
Спасибо за помощь.
Комментарии:
1. Также опубликуйте свое
PriceForm
определение. Это поможет. Это aModelForm
? Затем вы можете работать с созданным экземпляром. Но это все предположения, пока мы не увидим форму.2. Modelform, добавил его.
Ответ №1:
Если мы посмотрим в документации на то, как работают формы модели (точнее здесь ), мы увидим, что как только мы вызовем .save()
a ModelForm
, мы вернем экземпляр этой модели.
В вашем случае мы можем предположить следующее:
if form.is_valid():
price_instance = form.save()
Теперь, если вы хотите отобразить некоторые динамические вычисляемые значения для вашей модели ценообразования, вы можете добавить в свою Price
модель метод, который вычисляет их на основе Price.contract
.
Важная идея здесь заключается в том, что как только a ModelForm
считается valid
, и вы вызываете .save()
его, это зафиксирует данные по умолчанию в вашей базе данных и вернет экземпляр этой модели, который вы можете использовать впоследствии.
Комментарии:
1. Спасибо, это имеет смысл, и я еще немного изучу это.
2. Я не понимаю, как настроить метод в модели для расчета цены, я не могу найти правильный способ сделать это:
if self.contract == year_choice('year1')
3.
if self.contract == year_choice[0][0]
. Я бы рекомендовал заглянуть в пакет model_utils и класс Choices 🙂4. Алекс, я все еще не могу понять, как передать значения на страницу подтверждения, и не могу понять, как выполнять вычисления в модели. Я потратил последние 6 часов на поиски, и у меня болит голова: P