Python 创建和遍历“的列表”的替代方法;“坏的”;每次在django中调用clean时的值?

Python 创建和遍历“的列表”的替代方法;“坏的”;每次在django中调用clean时的值?,python,sql,database,django,web,Python,Sql,Database,Django,Web,假设我有一组单词,我不想让我的用户在他们要提交的标题中包含这些单词。除了将列表硬编码到clean函数中之外,还有哪些方法可以存储这些值 我曾考虑创建一个新模型,其中包含所有这些不允许使用的单词,但我不确定每次为该函数调用clean时查询数据库是否会比仅为名称创建一个单独的列表更慢/更快或更安全/更不安全。我确实认为,如果列表太长,可读性会更好。硬编码到clean函数中,向用户显示是最好的方法。测试禁止单词列表中是否有任何单词,并向用户显示为错误: 对不起,下面的单词是不允许的:foo,bar,f

假设我有一组单词,我不想让我的用户在他们要提交的标题中包含这些单词。除了将列表硬编码到clean函数中之外,还有哪些方法可以存储这些值


我曾考虑创建一个新模型,其中包含所有这些不允许使用的单词,但我不确定每次为该函数调用clean时查询数据库是否会比仅为名称创建一个单独的列表更慢/更快或更安全/更不安全。我确实认为,如果列表太长,可读性会更好。

硬编码到clean函数中,向用户显示是最好的方法。测试禁止单词列表中是否有任何单词,并向用户显示为错误:


对不起,下面的单词是不允许的:foo,bar,foobar

我建议在那里创建一个并使用clean方法,然后从中继承您的模型:

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

BAD_WORDS = ['abc', 'def']

class TitleMixin(models.Model):
    title = models.CharField(max_length=256)

    class Meta:
        abstract = True

    def clean(self, *args, **kwargs):
        super(TitleMixin, self).clean(*args, **kwargs)
        if any(w in self.title for w in BAD_WORDS):
            raise ValidationError('Bad Title')
现在,使用上述抽象模型创建新模型,所有模型都具有相同的功能来检查标题中的脏话:

class MyNewModel(TitleMixin):
    pass

好的,很酷。在clean函数中没有定义BAD_单词列表有什么特殊原因吗?没有原因。坏单词可能会在其他一些抽象模型或其他地方使用,因此如果在全局范围级别声明,则很容易导入它们。你可以在任何你想要的地方定义它们。