Неправильная ошибка проверки в поле модели формы django при прохождении через чистый метод - PullRequest
1 голос
/ 04 сентября 2011

Model и ModelForm в проекте django определяются следующим образом:

class Consumption(models.Model):
    date=models.DateTimeField(default=datetime.now)
    product_name=models.ForeignKey(Stock,to_field='product_name')
    quantity=models.IntegerField()
    customer=models.CharField(max_length=50,null=True,blank=True)

    def __unicode__(self):
        return self.product_name

class ConsumptionForm(ModelForm):
    class Meta:
        model=Consumption

    def clean_quantity(self):
        cleaned_data=self.cleaned_data
        product=cleaned_data.get("product_name")
        quantity=int(cleaned_data.get('quantity'))
        stock=Stock.objects.get(product_name=product)
        if quantity > stock.quantity:
            raise forms.ValidationError("Not enough stock")
        return cleaned_data

, где класс Stock содержит название продукта, которое служит внешним ключом к потреблению и количество которого должно быть больше количества потребления.

Теперь проблема в том, когда я вхожу, отправляю сообщение в ConspositionForm.Это дает мне ошибку в поле количества, поскольку это поле должно быть целым числом даже после того, как я предоставляю ему целое число.

В чем может быть причина этого?

Ответы [ 2 ]

3 голосов
/ 04 сентября 2011

Вы возвращаете весь словарь cleaned_data из метода clean_quantity, а не только значение quantity.

2 голосов
/ 04 сентября 2011

Вам не нужно указывать cleaned_data.get («количество») до int.Метод Django to_python () в базовом классе формы сделает это за вас.Все формы будут пытаться преобразовать свои значения в значения Python как часть процесса проверки.

Я не вижу ничего в вашем методе clean_quantity (), который заставил бы меня думать, что он не будет работать, хотя выМы не показываем ваш класс Stock, чтобы мы могли видеть тип поля stock.quantity.

Мой совет - написать модульный тест для этой формы и просмотреть метод, чтобы убедиться, что вы получаетеправильные значения.https://docs.djangoproject.com/en/1.3/topics/testing/

Если вы не привыкли писать модульные тесты, сейчас самое время начать.Они действительно могут сэкономить вам много времени.

...