Django管理员管理器覆盖

时间:2015-12-07 11:55:25

标签: python django django-admin django-managers

我有多项选择题,其中模型Question为问题,Choices为答案。我想将可以创建的Choices的数量限制为Question到4.

models.Manager用于验证问题的选择数量。

class Question(models.Model):
    QUESTION_TYPES = (
    ('MC', 'Multiple Choice'),
    ('SB', 'Subjective'),
    )
    question_type = models.CharField(choices=QUESTION_TYPES, max_length=2, default='MC')
    question_text = models.TextField(null=False, blank=False)

Choice

class Choice(models.Model):
    choice_text = models.CharField(max_length=100, null=True)
    question= models.ForeignKey(Question, null=True , related_name='choices')
    is_answer = models.BooleanField(default=False)
    objects = ChoiceManager()

自定义Manager

class ChoiceManager(models.Manager):
    def create(self, **kwargs):
        question = kwargs.pop('question',None)
        if question is not None:
            if question.choices.all().count() > 4:    # see related_name 
                raise AssertionError
            else:
                return self

如果我使用python shell创建模型实例,那么一切正常。

当我使用 AdminSite 时。我能够为一个问题创建4个以上的选择。如何在AdminSite上实现我想要的行为(在管理站点上引发错误)?在管理级别覆盖管理器?我该怎么办呢?

admin.site.register(Question)
admin.site.register(Choice) 

1 个答案:

答案 0 :(得分:0)

Needed要覆盖模型类本身的Analyzer analyzer = new SnowballAnalyzer(Lucene.Net.Util.Version.LUCENE_30, "English") 方法。

save