在 Django 中编辑动态选择字段

Editing dynamic choice fields in Django

我有一个带有 Post 模型的标准 Django 博客,只有在模型上我为 approvers 添加了一个 ManyToManyField,想法是后端通过 post 发给 2 个或更多审批人确认内容后才发布。

class Post(models.Model):
    author = models.ForeignKey(
        get_user_model(), null=True, on_delete=models.SET_NULL)
    title = models.CharField(max_length=30)
    content = models.CharField(max_length=30)
    approvers = models.ManyToManyField(Approvers)

我可能会学习 django-fsm 之类的东西,为 Post 模型创建一个有限状态机来管理它是否 draft/in approval/published,但我会希望能够更改 approvers 字段,以便用户可以动态更改批准者(用户)的数量和顺序。

最好的方法是什么?我想我可以尝试将 approvers 字段更改为 JSONField 以便用户可以添加/删除/更改批准者的顺序,然后在前端处理解释并编写一些函数来与 django-fsm,但这感觉像是把事情混为一谈了。我错过了更简单的路线吗?

为什么不制作另一个模型来做到这一点

class PostApprover(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='approvers')
    user = models.ForeignKey(Approver, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

要访问 post(假设 ID 为 5)被批准(降序)的顺序。您可以这样做

post = Post.objects.get(id=5)
post.approvers.order_by('-created_at')

您可以更改 created_at 的值来更改顺序。 或者你也可以制作一个整数字段来确定你的顺序