0

このモデルがmodels.pyで定義されているとします。

[ . . . ]
class Robot(models.Model):
    ROBOT_CATEGORIES = (
    [ . . . ]
    )   
    name = models.CharField(max_length=30)
    version = models.ForeignKey('Version')
    category = models.CharField(max_length=10, choices=ROBOT_CATEGORIES)
    comments = models.CharField(max_length=2000, blank=True)

    def __unicode__(self):
        return "ROBOT %s [%s]" % (self.name, self.version)
    class Meta:
        unique_together = ('name', 'version',)

このモデルに管理機能を追加したいと思います。ユーザーは、異なるロボット名のコンマ区切りリストを入力して、save_modelそれらを異なるオブジェクトとして保存することができます。このために、私はすべての検証を自分で行いたいと思います。これが管理コードです:

class RobotForm(forms.ModelForm):
    name = forms.CharField()
    comments = forms.CharField(widget=forms.Textarea, required=False)

    def clean_name(self):
        # custom validation here
        [ . . . ]
        return data

    def clean(self):
        cleaned_data = super(RobotForm, self).clean()
        # custom validation here
        [ . . . ]
        return cleaned_data

    class Meta:
        model = Robot

class RobotAdmin(admin.ModelAdmin):
    form = RobotForm
    list_display = ('name','version','category','comments')

    def save_model(self, request, obj, form, change):
        # custom save method
        obj.save()

admin.site.register(Robot, RobotAdmin);

max_lengthのモデルで設定した制限を除いて、すべてが正常に機能しRobot.nameます。「追加」フォームで、「名前」フィールドのリストの長さが30文字を超えると、エラーが点滅します。メソッドで個々の名前の長さをclean_name検証し、フォームフィールドでmax_length検証を無効にします。どうすればよいですか?

4

1 に答える 1

1

オーバーライドされたクリーン メソッドで、次のように、cleaned_data からエラーを削除します。

1 つの django フォーム要素でデータ検証をオーバーライドする

于 2012-12-18T14:27:58.763 に答える