Django CharField的局限性

时间:2009-07-29 12:54:26

标签: python django

如何为CharField指定黑名单。但是我希望黑名单在Django管理面板中有效...否则我只会在视图中验证它。

黑名单是指无法使用的值。我也为值设置了唯一,但我想禁用一些字符串。

谢谢, 最大

3 个答案:

答案 0 :(得分:1)

在调用父类'save()方法之前,我会覆盖模型的save()方法和要插入黑名单的值。

类似的东西(简化):

class BlackListModel(models.Model):   
   blacklist = ['a', 'b', 'c']

   # your model fields definitions...

   def save(self, *args, **kwargs):
        if self.blacklist_field in self.blacklist:
            raise Exception("Attempting to save a blacklisted value!")
        return super(BlackListModel, self).save(*args, **kwargs)

这样它适用于所有应用程序。

答案 1 :(得分:0)

这不是开箱即用的。您必须编写custom form field或以其他方式添加custom admin handling才能进行管理级验证。要在数据库级别执行此操作,我怀疑您需要设置某种触发器和存储过程,但这不是我的区域,因此我将其留给其他人。

答案 2 :(得分:0)

由于我们已经过了几年,所以您应该编写一个自定义黑名单验证器:

from django.db import models    
from django.core.exceptions import ValidationError

def validate_blacklist(value):
    if value in ['a', 'b', 'c']:
        raise ValidationError(
            "'a', 'b' and 'c' are prohibited!",
            params={'value': value},
        )

class MyModel(models.Model):
    even_field = models.CharField(max_length=200, validators=[validate_even])

有关完整文档,请参见:Django Validators