验证自定义管理器方法中的输入?

时间:2014-04-08 02:42:13

标签: django django-models django-orm django-managers

让我们说我正在创建一个民意调查应用,我希望用户一起创建他们的民意调查和选择,而不是在以后修改它们。

目前我有类似的事情:

class PollManager(models.Manager):
    def create_poll(self, name, owner, choices):
        new_poll = Poll(name=name, owner=owner)
        new_poll.save()
        for name in choices:
            Choice(name=choice, poll=new_poll).save()

class Poll(models.Model):
    name = models.CharField(max_length=30)
    objects = PollManager()

class Choice(models.Model):
    name = models.CharField(max_length=30)
    poll = models.ForeignKey(Poll)

但是,如果Poll.objects.create_poll方法的输入无效,我可能会在没有任何选择的情况下意外保存轮询,例如。但我认为在创建Choice实例时我可以将new_poll.save()留到最后而不会出错。

我可以在try...except方法的开头添加一些create_poll内容,以确保输入全部有效,但我担心如果我能打破DRY这样做。

我应该以这种方式使用自定义管理器方法吗?如果是这样,我应该如何最好地处理验证?如果没有,那么某些等效功能被认为是一种好的做法?

提前致谢。

2 个答案:

答案 0 :(得分:0)

我会在表单中使用clean / save方法验证数据(如果使用django表单)。

答案 1 :(得分:0)

您可以使用django模型表单,根据您的模型对字段进行变换 link