【问题标题】:Django CharField limitationsDjango CharField 限制
【发布时间】:2009-07-29 12:54:25
【问题描述】:

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

黑名单是指不能使用的值。我还为该值设置了唯一性,但我也想禁用一些字符串。

谢谢, 最大

【问题讨论】:

    标签: python django


    【解决方案1】:

    几年后,你应该编写一个自定义的黑名单验证器:

    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

    【讨论】:

      【解决方案2】:

      在调用父类的 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)
      

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-20
          • 2015-03-24
          • 1970-01-01
          • 2010-09-30
          • 2011-10-30
          • 2018-12-08
          • 1970-01-01
          相关资源
          最近更新 更多