2015-09-25 2 views
1

У меня проблема с проверкой формы Django, потому что я не могу сохранить модель перед очисткой, конечно. У меня есть модель заказа:Django ValidationError в поле зрения ?! не форма

class Reservation(models.Model): 
    from = models.DateTimeField() 
    to = models.DateTimeField() 
    total_price = models.DecimalField() 
    paid = models.DecimalField() 

    def calculate_price(self): 
     self.total_price = some_magic(self.from, self.to) 

и формы:

class ReservationForm(forms.ModelForm): 
    payment_amount = forms.DecimalField() 

    class Meta: 
     model = Reservation 

    def clean(self): 
     ???? 

Я хочу, чтобы проверить, в чистом методе, если PAYMENT_AMOUNT не больше, чем TOTAL_PRICE но TOTAL_PRICE не обновляется - я называю calculate_price() после сохранения модели ,

Могу ли я поднять ValidationError в виду после расчета цены?

+0

@RahulGupta Просто для простоты я переписал метод резервирования .save (self). –

ответ

1

Возможно, вы разместите содержимое calculate_price в методе, который не изменяет данные экземпляра модели резервирования.

Например, на данный момент у вас есть притворная функция some_magic. В clean вы могли бы поставить что-то вроде этого:

def clean(self): 
    data = super(ReservationForm, self).clean() 
    total_price = some_magic(data.get('from'), data.get('to')) 
    if data.get('payment_amount') > total_price: 
     raise ValidationError("Payment amount should not exceed total price of $%s" % total_price) 
    return data 

Идея заключается в том, чтобы развязать расчет ценовых обсчета из акта сохранения его на модели, так что он может быть использован в нескольких местах (то есть. модель save способ или вид проверка).

Смежные вопросы