【问题标题】:Validating input in custom manager methods?验证自定义管理器方法中的输入?
【发布时间】:2014-05-20 12:47:27
【问题描述】:

假设我正在创建一个投票应用程序,我希望用户一起创建他们的投票和他们的选择,而不是在以后修改它们。

目前我有类似的东西:

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() 直到最后而不会出错。

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

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    您可以使用 django 模型表单,根据您的模型修改字段 link

    【讨论】:

    • 对,但在这种情况下,我会从一个表单创建多个模型。
    【解决方案2】:

    我将验证表单清理/保存方法中的数据(如果您使用 django 表单)。

    【讨论】:

    • 谢谢。我想我可能把重型模型的事情做得有点过火了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2019-09-28
    • 2018-01-05
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多