Django 1.11:不清理表单字段

时间:2017-12-10 22:50:37

标签: python-3.x django-forms

大家好!
实现对应用程序的编辑/添加功能,我发现Django忽略了我的clean_< field_name>某些类中的方法。当我尝试调试它时,我发现这些方法甚至都没有被调用。以下是相关的代码片段:
models.py

class StoredItem(models.Model):
    item = models.ForeignKey(Item)
    quantity = models.IntegerField(default=0)

    class Meta:
        ordering = ["item"]

    def __str__(self):
        return "{0} - {1}, {2} pcs.".format(self.item.serial, self.item.name, self.quantity)

    def get_absolute_url(self):
        return reverse('almacen:storeditem-detail', args=[str(self.id)])

forms.py

# Stored items related forms
class NewOrEditStoredItemForm(forms.Form):
    item = forms.ModelChoiceField(queryset=StoredItem.objects.all())
    quantity = forms.IntegerField()

    def clean_item(self):
        item = self.cleaned_data['item']
        storeds = map(lambda x: x.item, StoredItem.objects.all())
        if item in storeds:
            raise ValidationError(_("This item has already been stored - you only can change its quantity in the stock!"))

    def clean_quantity(self):
        quantity = self.cleaned_data['quantity']
        if quantity < 0:
            raise ValidationError(_("Items quantity can not be negative!"))
        return quantity

views.py

# Stored items related ---------------------------------------------------------------------
class CreateStoredItem(CreateView):
    model = StoredItem
    fields = '__all__'


class UpdateStoredItem(UpdateView):
    model = StoredItem
    fields = '__all__'

storeditem_form.html

{% extends 'base_template.html' %}

{% block header %}

    <h2 id="center">Stocked item add/delete </h2>

{% endblock %}

{% block content %}

    <form action="" method="post">
        {% csrf_token %}

        <table>
            {{ form.as_table }}
        </table>

        <input type="submit" value="Submit"/>

    </form>

{% endblock %}

修改 通过将类重写为函数来解决。对于类,我被建议使用验证器,但无论如何,函数按我的需要工作。

1 个答案:

答案 0 :(得分:0)

通过将类重写为函数来解决。对于类,我被建议使用验证器,但无论如何,函数按我需要的方式工作

相关问题