Django, обновление поля в классе UpdateView по условию
Есть модель Лот, как в UpdateView обновить поле current_rate по условию? условие: нужно чтобы новое значение было строго больше предыдущего
class Lot(models.Model):
title = models.CharField(max_length=50)
description = models.TextField(verbose_name='Описание')
category = models.ForeignKey(Category, on_delete=models.PROTECT, related_name='lots')
owner = models.ForeignKey(User, verbose_name='Автор лота', on_delete=models.CASCADE, related_name='owner_lots', default=1)
current_buyer = models.ForeignKey(User, verbose_name='Текущий покупатель', blank=True, on_delete=models.PROTECT, related_name='buyer_bets', null=True)
created_at = models.DateTimeField(auto_now_add=True, verbose_name='Опубликовано')
days_rate = models.IntegerField(verbose_name='Количество дней размещения лота')
starting_rate = models.IntegerField(verbose_name='Начальная ставка')
current_rate = models.IntegerField(verbose_name='Текущая ставка', default=0, blank=True)
views:
class LotUpdateRateView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
model = Lot
form_class = LotUpdateRateForm
template_name = 'bet/lot_update_rate.html'
success_url = reverse_lazy('lot_list')
success_message = "Ставка принята"
form:
class LotUpdateRateForm(forms.ModelForm):
current_rate = forms.IntegerField(label='Текущая ставка', widget=forms.NumberInput(attrs={'class': 'form-control'}))
current_buyer = forms.Select()
Ответы (1 шт):
Автор решения: Даниял
→ Ссылка
Переопределите в вашем представлении LotUpdateRateView метод form_valid
def form_valid(self, form):
self.object = form.save(commit=False)
if (условие которое вам нужно для сохранения результата):
self.object.current_rate = self.request.current_rate
self.object.save()
return super().form_valid(form)
Могу ошибаться насчет self.request.current_rate , Пока еще сам плохо разбираюсь как вытягивать данные из формы, но должно сработать. Данный метод отвечает за то что будет делать приложение, если все данные ввденные в форму верны, тут вы просто проверяете больше ли значение введенное в форме че то что у вас обозначено, и в случае True , меняете. Но если меньше делает уже то что считаете нужным.