使用Django Forms:如何在userdef验证中使用forms.ModelChoiceField的选定值

时间:2013-06-02 06:24:08

标签: django forms validation

我得到了以下模型:

class currency(models.Model):
    currency = models.CharField(max_length=50)
    dollaramount = models.DecimalField(max_digits=10, decimal_places=2)
    def __unicode__(self):
        return self.currency

此模型包含2个货币值为“$”和“€”

的货币

货币模型与以下形式的ModelChoiceField相关,其具有用户检查金额的用户定义验证“clean_amount”,具体取决于货币区域中实际选择的货币来自其自身。

如果所选对象的值为“$”或“€”,我如何在userdef-validation“clean_amount”中进行比较?

from django import forms
from currencies.models import currency

class createform(forms.Form):
    currency = forms.ModelChoiceField(queryset = currency.objects.all())
    amount = forms.DecimalField(initial = 0)

    def clean_amount(self):
        currencyfield = self.cleaned_data['currency']
        amount = self.cleaned_data['amount']
        if amount < 0:
            raise forms.ValidationError("Amount must be at least 0.")

        #HERE I WANT TO CHECK
        choosencurrency = currencyfield.??????

        if choosencurrency == "$" :
           #check $amount
        if choosencurrency == "€" :
           #check €amount

    return amount

1 个答案:

答案 0 :(得分:1)

您应该在clean()而不是clean_amount()中执行此操作。从clean,您可以访问self.cleaned_data['amount']self.cleaned_data['currency']