0

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)

フォーム.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 (to 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 ドキュメントを見てみましょう。

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

フォームバリデーションだけバリデーションしたい...

...

ModelForm ではなくFormsを使用する必要がありますか?

ModelForm を使用しているときに、必要なロジックを使用できますか?

4

1 に答える 1

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
于 2013-04-12T14:05:25.113 に答える