【问题标题】:How to use only form validation of ModelForm?如何仅使用 ModelForm 的表单验证?
【发布时间】:2013-04-05 01:57:40
【问题描述】:

如何只使用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为真)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 时,我可以使用我想要的逻辑吗?

【问题讨论】:

标签: django python-2.7 django-1.4 django-forms


【解决方案1】:
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

【讨论】:

  • 下面这个小麻烦,clean函数什么时候调用? ContactForm 是从哪里或如何进入其中的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
  • 2015-06-19
  • 2016-05-07
  • 2018-10-03
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多