2013-04-12 44 views
0

如何僅使用表格驗證ModelForm如何僅使用FormForm的表單驗證?

請看我的代碼!

models.py

from django.db import models 

class IPAddr(models.Model): 
    ip = models.GenericIPAddressField(unique=True,) 

class myModel(models.Model): 
    ip = models.ForeignKey(IPAddr) 

forms.py

from django.forms import ModelForm 
from django import forms 
from app.models import * # This is thing above models.py 

class myModelForm(ModelForm): 
    ip = forms.GenericIPAddressField() 
    class Meta: 
     model = myModel 

我想下面的邏輯。

用戶輸入的IP(IP到字段) - >驗證 - >(form.is_valid爲True)goodIP = IPAddr.objects.get_or_create(user_input_ip) - > myModel.objects.create(IP = goodIP)

但驗證總是失敗...

因爲(例如)用戶輸入是'1.2.3.4'。如您所知,'1.2.3.4'是有效的IP地址。

但是form.is_valid是False。因爲'1.2.3.4'不是IPAddr實例。

所以我不能使用我想要的邏輯。

我們來看看ModelForm document

The first time you call is_valid() or access the errors attribute of a ModelForm triggers form validation as well as model validation. 

我想了解的唯一形式驗證的驗證......

...

難道我必須使用Forms沒有的ModelForm ...?

使用ModelForm時,我可以使用我想要的邏輯嗎?

+0

可能重複:http://stackoverflow.com/questions/30295246/django-genericipaddress-field-is-not-validating-input –

回答

0
class myModelForm(forms.ModelForm): 
    ip = forms.GenericIPAddressField() 

    class Meta: 
     model = myModel 

    def clean(self): 
     cleaned_data = super(ContactForm, self).clean() 
     ip = cleaned_data.get("ip") 

     //do your login here 

     return cleaned_data 
+0

下面這個小麻煩,當被稱爲清潔功能? ContactForm在哪裏或如何進入? –