2013-06-02 23 views
0

我得到了下面的模型内的forms.ModelChoiceField的选择值:使用Django形式:我如何使用USERDEF验证

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个entrys与货币价值的“$”和“ €“

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

如果来自所选对象的值是“$”或“€”,我如何在userdef验证“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 
+0

您是否试图将表单提交结果保存到数据库? – cazgp

+0

是的,我想将它们保存到提交给db的模型中... – daeagzte

+0

然后,您应该使用ModelForm,它将数据映射到您的模型。 – cazgp

回答

1

你应该clean(),不clean_amount()做到这一点。从clean您可以访问self.cleaned_data['amount']self.cleaned_data['currency']

+0

好吧,但金额= self.cleaned_data ['金额']已经在这里工作在clean_amount()罚款,唯一的问题是如何访问self.cleaned_data ['货币']。 – daeagzte

+0

因此,如果我在clean()而不是clean_amount中编写代码,那么代码是什么?访问值“$”或“€”? – daeagzte

+0

我没有看到我给出的答案不清楚。这是以'干净'方式访问它们的代码。 –