将临时信息添加到Django模型的最佳方法是什么? (没有创建新模型)

时间:2014-08-12 16:52:49

标签: python django django-models

理解我的问题的最好方法是通过代码:

class ToDoList(TimeStampedModel):
    DEFAULT_THEME = 1

    name = models.CharField(max_length=32)
    ... # other fields
    STATUS_CHOICES = (
        ('C', 'CREATED'),
        ('R', 'READY'),
        ('V', 'VALIDATED')
    )
    status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='C')

有几种类型的用户

  • 创作者:谁可以创建ToDoList并请求验证
  • 验证者:谁可以验证列表

现在,当Validator拒绝验证请求时,他还必须提供原因。这可能不会超过所有情况的10%,因此我不想在我的ToDoList模型上添加 rejection_reason 字段。

我知道一个明显的解决方案是创建另一个名为Reason的模型,只有一个char字段和一个FK到我的ToDo模型,但我想知道是否有更好的方法来做到这一点。

我不知道这是否有帮助,但我使用django-rest-framework作为API。

感谢。

更新

在验证器拒绝列表后,他必须提供原因,以便创建者可以更改列表的任何错误。进行更改后,Creator再次请求验证。循环继续,直到Validator接受ToDoList。此时,不再需要拒绝原因,因此可以将其删除。

所以,最终,拒绝原因将不再存在,我不认为(从数据库空间的角度来看)可以使用一个只能临时使用的字段。

1 个答案:

答案 0 :(得分:1)

您不必担心将(大概)少量文本与ToDoList一起存储。如果目标是保持简单,而不是添加另一个模型,我将如何处理它。

class ToDoList(models.Model):
    name = models.CharField(...)
    validated_at = models.DateTimeField(..., null=True, editable=False)
    rejection_reason = models.TextFiel(..., editable=False)

查询validated_at__isnull=False以获取经过验证的待办事项列表,完全忽略rejection_reason。查询validated_at__isnull=True以获取未经验证的待办事项列表列表,并使用rejection_reason向用户显示原因。如果要在数据库中节省空间,请在验证待办事项列表时清空rejection_reason字段。您还可以使用filter (rejection_reason="")将todo列表缩小到那些没有拒绝原因的列表(例如,尚未验证或拒绝的那些),或exclude同样的事情得到那些被拒绝的人。