Python Django:设置模型中唯一字段的最大数量

Python Django:设置模型中唯一字段的最大数量,python,django,django-models,Python,Django,Django Models,我正在使用Django 1.2。我想制作一个包含3个字段的模型,如下所示: class Also_Viewed(models.Model): page = models.ForeignKey(Page) also_page = models.ForeignKey(Page) rank = models.IntegerField() class Meta: unique_together = ('page', 'also_page') 但是,对于每

我正在使用Django 1.2。我想制作一个包含3个字段的模型,如下所示:

class Also_Viewed(models.Model):
    page = models.ForeignKey(Page)
    also_page = models.ForeignKey(Page)
    rank = models.IntegerField()
    class Meta:
        unique_together = ('page', 'also_page')
但是,对于每个唯一的页面字段,我希望将表中的行数限制为最大值(比如24行)

例如,以下类型的行就可以了

(Page_A, Page_x, 3)
(Page_A, Page_y, 21)
...
(Page_A, Page_z, 45)
…表格中最多24个事件


您建议如何在Django models.py文件中设置此约束

我能想到的唯一方法是添加另一个字段,并将choices选项设置为只有24个元组的iterable。这感觉像一个黑客,但它实际上是一个有效的解决方案吗?或者你能想出更优雅、更高效的解决方案吗


我还想确保页面和页面是不同的对象。然而,我不知道如何处理这个问题




非常感谢您的帮助,非常感谢

如果您使用自己的视图,可以使用模型验证作为放置此代码的位置。(但请记住,你必须称自己为干净人)

如果希望在管理中强制执行此操作,则需要覆盖管理表单。

# pseudocode. If you went the route of admin forms, 
# the ModelForms would use self.cleaned_data[attr]

if self.page == self.also_page: 
    raise models(or forms).ValidationError("Pages are the same")

elif Also_Viewed.objects.filter(page=self.page).count() >= 24:
    raise models(or forms).ValidationError("Can not have more than 24 items for %s" % self.page)

# let the unique_together catch uniqueness.