Python Django:设置模型中唯一字段的最大数量
我正在使用Django 1.2。我想制作一个包含3个字段的模型,如下所示: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') 但是,对于每
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.