2

我意识到以前有人问过这个问题,但是我找不到真正涉及我正在尝试做的事情的问题。我认为这很简单,但我想知道普通民众认为这里最好的形式是什么。

假设我们有以下内容:

模型.py

class TestClass(models.Model):
    user = models.ForeignKey(User)
    testfield = models.CharField()
    testbool = models.BooleanField(default=False)

def save(self, *args, **kwargs):
    """
    - what we're trying to do here is ensure that the User doesn't have more than
      X (lets say 5) related test fields.
    - what if we also wanted to add validation to testfield to ensure it was 
      only [a-zA-Z]?
    """
    if TestClass.objects.filter(user=self.user).count() >= 5:
        # How do we exit gracefully?
        return 
    super(TestClass, self).save(*args, **kwargs)

保存功能中的评论几乎总结了我的问题: - 我们如何确保给用户的相关 TestClass 不超过 5 个 - 如果已经有 5 个,我们如何优雅地退出保存(不保存) -我们如何将此报告给用户?- 我们在哪里验证 testfield 对象以确保它只有 [az]?我可以只导入 re 并在这里做吗?我应该吗?

最好把这一切都扔在这里吗?我应该触发 pre_save 信号吗?还是我应该只使用带有验证的 ModelForm?

4

1 回答 1

0

你是对的,目前没有明显的地方可以做到这一点。这就是为什么现在有一个 Summer of Code 项目正在进行以添加模型级验证,这应该会使这类事情变得简单而轻松。

不幸的是,它不会准备好几个月。同时,您的答案取决于添加数据的方式。它会以编程方式完成,还是总是通过表单完成?如果是后者,那么将验证放入表单是可行的方法(请注意,您可以在管理员和您自己的视图中使用相同的模型表单或它的子类,因此无需重复逻辑)。

于 2009-06-05T08:59:29.020 回答