在Django模型中添加临时信息的最佳方式是什么?(不创建新模型)
理解我的问题最好的方式是通过代码:
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')
这里有几种用户类型:
- 创建者:可以创建待办事项列表并请求验证
- 验证者:可以验证这个列表
现在,当一个验证者拒绝验证请求时,他必须提供一个理由。这个情况大概只会发生在10%的情况下,所以我不想在我的待办事项模型里加一个拒绝理由的字段。
我知道一个明显的解决方案是创建另一个模型,叫做理由(Reason),里面只有一个字符字段,并且有一个外键指向我的待办事项模型,但我想知道有没有更好的方法。
我不知道这是否有帮助,但我正在使用django-rest-framework来做API。
谢谢。
更新
在验证者拒绝列表后,他必须提供理由,这样创建者才能修改列表中有问题的地方。修改完后,创建者会再次请求验证。这个过程会一直持续,直到验证者接受这个待办事项列表。到那时,拒绝理由就不再需要了,所以可以删除。
所以,最终拒绝理由将不再存在,我觉得在数据库空间的角度来看,保留一个只会临时使用的字段是不太合适的。
1 个回答
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="")
来筛选出没有拒绝原因的待办事项(比如那些还没有被验证或拒绝的),或者用 exclude
来获取那些已经被拒绝的事项。