簡體   English   中英

Django CharField限制

[英]Django CharField limitations

如何為CharField指定黑名單。 但是我也希望黑名單在Django管理面板中也能有效...否則,我只會在視圖中對其進行驗證。

黑名單是指無法使用的值。 我還為該值設置了唯一,但我也想禁用一些字符串。

謝謝,馬克斯

在調用父類的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)

這樣,它就可以在所有應用程序中使用。

這是不可能的。 您將必須編寫一個自定義表單字段或以其他方式添加自定義管理員處理才能進行管理員級別的驗證。 要在數據庫級別執行此操作,我懷疑您需要設置某種觸發器和存儲過程,但這不是我的專長,因此我將其留給他人。

由於幾年后,您應該編寫一個自定義黑名單驗證器:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM