Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
限制Django表中的行数_Django_Django Models - Fatal编程技术网

限制Django表中的行数

限制Django表中的行数,django,django-models,Django,Django Models,我的模型文件中有一个表,我想将其设计为表中最多有十行。超过限制时,将删除最旧的行。对于某些上下文,这是前端的一个显示,向用户显示他们访问过的十个最新链接。我是Django的新手,所以如果有人对如何做到这一点提出建议,我将不胜感激 您可以编写一个自定义的save方法来检查YourObject.objects.all()的长度,然后在长度等于10时删除最旧的一个 大致如下: def save(self, *args, **kwargs): if YourModel.objects.count

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

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

大致如下:

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

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

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

由于您希望删除
最旧的
,因此我假设您在模型中创建了一个
字段

一旦
保存

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)

当然,没有什么可以阻止您使用该信号,但只有在您绝对确信
save
方法不会失败的情况下才可以使用它

最好使用
objects.count()?