限制Django表中的行数

时间:2013-08-08 20:27:43

标签: django django-models

我的模型文件中有一个表格,我想设计它,以便表格中有十行限制。超过限制时,将删除最旧的行。对于某些上下文,这是针对前端的显示,向用户显示他们已访问的十个最新链接。我是Django的新手,所以如果有人对如何做到这一点有任何建议,我们将不胜感激!

2 个答案:

答案 0 :(得分:4)

在我看来,您可以使用Signals。在这种情况下为post_save。这样,您就可以将对象创建和删除逻辑分开。

由于您希望删除oldest,我假设您在模型中有created字段。

save后,

def my_handler(sender, instance, **kwargs):
    qs = MyModel.objects.order_by('created') #ensure ordering.
    if qs.count() > 10:
        qs[0].delete() #remove the oldest element

class MyModel(models.Model):
    title = models.CharField('title', max_length=200)
    created = models.DateTimeField(auto_add_now=True, editable=False)

post_save.connect(my_handler, sender=MyModel)

当然,没有什么能阻止您使用pre_save信号,但如果您绝对确定save方法不会失败,则只使用

答案 1 :(得分:3)

您可以编写一个自定义save方法来检查YourObject.objects.all()的长度,然后在该长度等于10时删除最旧的方法。

以下内容:

def save(self, *args, **kwargs):
    if YourModel.objects.count() == 10:
        objects[0].delete()

    super(YourModel, self).save(*args, **kwargs)