擅长:python、mysql、java
<p>这种事情最好在数据库级别实现。使用许多数据库(包括Postgresql)支持的约束。第二个最好的选择仍然是在数据库级别,但是使用触发器(例如在mysql上)。最后一种方法是在模型中超越save方法。在</p>
<p>这是一种穷人的前插触发器</p>
<pre><code>def save(self, *args, **kwargs):
if MyModel.objects.filter(user_profile=self.user_profile).count() < X:
return super(MyModel,self).save(*args,**kwargs)
raise ValidationError("Too many records mate")
</code></pre>
<p>请注意,要做到万无一失,您必须将整个过程包装在事务中。或者,您可以保存该对象,然后进行计数、删除并在超出该数量时引发异常。在</p>
<p>在完成了所有这些之后,有人很可能通过使用dbshell插入一条记录而把事情搞糟——正如前面提到的,触发器或约束的用户可以避免这种情况。在</p>