如何仅使用ModelForm的表单验证?
请看我的代码!
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 :(得分: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