擅长:python、mysql、java
<p>在我看来,您应该研究django模型的<a href="https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.clean" rel="nofollow">clean()</a>方法。
当您尝试保存实例时,会调用它。对于您的情况,代码可能如下所示(未测试):</p>
<pre><code>from django.core.exceptions import ValidationError
class Person(models.Model):
max_books = 1
def clean(self):
books_count = self.books.all().count()
if books_count >= max_books:
raise ValidationError("This person has too much books !")
class Book(models.Model):
issued_to = models.ForeignKey(Person, related_name="books")
</code></pre>
<p>这样,您就可以创建Person模型的子类,并设置自己的max\u books限制:</p>
<pre><code>class Student(Person)
max_books = 3
class Employee(Person)
max_books = 30
</code></pre>
<p>但是,要小心,因为通过使用此解决方案,您将依赖于django模型的具体继承,这可能导致<a href="http://jacobian.org/writing/concrete-inheritance/" rel="nofollow">performance issues</a>。你知道吗</p>