Django的选择。如何设置仅选择一次的选项

时间:2017-07-09 03:33:04

标签: python django

我正在写博客。我有一个部分会有一个特殊的帖子。另一页我收集了特别帖子。这是我的model.py

class Post(models.Model):
    post = models.TextField()
    SPECIAL = (
        ('0', 'Special Post'),
        ('1', 'General Post'),
        ('2', 'Inactive Special Post'),
    )
    specialpost = models.CharField(max_length=1, choices=SPECIAL, default='1', )

特刊中只能有一个帖子。当添加新的特殊职位时,旧的特殊职位应转移到非活动特别职位。所以它可以在特别邮件收集页面中显示。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

正如@ n​​eeraj-kumar在评论中提到的,你可以通过覆盖模型的save()方法来实现这一点。添加到Post类是这样的:

class Post(models.Model):
    ...

    def save(self, *args, **kwargs):
        special_post = Post.objects.filter(specialpost='0')
        if self.specialpost == '0' and special_post:
            special_post.update(specialpost='2')
        super(Post, self).save(*args, **kwargs)

答案 1 :(得分:0)

当您添加新帖子时,请按照此change_actual_post = Post.objects.get(specialpost=0)过滤查询,然后更改旧帖change_actual_post.specialpost = 2的状态,最后保存change_actual_post.save()

在添加新的特殊帖子

之前,将这3行添加到views.py文件中