理解我的问题的最好方法是通过代码:
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')
有几种类型的用户
现在,当Validator拒绝验证请求时,他还必须提供原因。这可能不会超过所有情况的10%,因此我不想在我的ToDoList模型上添加 rejection_reason 字段。
我知道一个明显的解决方案是创建另一个名为Reason的模型,只有一个char字段和一个FK到我的ToDo模型,但我想知道是否有更好的方法来做到这一点。
我不知道这是否有帮助,但我使用django-rest-framework作为API。
感谢。
更新
在验证器拒绝列表后,他必须提供原因,以便创建者可以更改列表的任何错误。进行更改后,Creator再次请求验证。循环继续,直到Validator接受ToDoList。此时,不再需要拒绝原因,因此可以将其删除。
所以,最终,拒绝原因将不再存在,我不认为(从数据库空间的角度来看)可以使用一个只能临时使用的字段。
答案 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
同样的事情得到那些被拒绝的人。