gue*_*tli 3 django django-models
我想遵循此准则并避免使用可为空的外键。
我有一个 django 用户模型的外键。
如果我尝试将 request.user 存储在此模型的实例中,则会收到此错误:
ValueError: Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser>>":
"MyModel.user" must be a "User" instance.
Run Code Online (Sandbox Code Playgroud)
我认为避免非无条件数据模式(可为空的外键)是可行的。
我怎么能解决这个问题?
这些指南建议您创建一个反映匿名用户的用户实例。否则称为哨兵值。您必须通过一些唯一的键(可能是用户名)来跟踪它。然后确保它存在并且没有其他人实际使用该密钥创建了用户,否则您会遇到其他问题。
但是,由于上面列出的那些问题,我不同意这些指导方针。如果您的数据模型允许可选关系,那么您绝对应该使用 NULL 值。
关于评论:
如果您的数据中没有 NULL,那么在处理数据时,您的源代码中将没有 NullPointerException :-)
仅仅因为没有 NULL 字段,并不意味着这些条件不存在。您仍在处理这些边缘情况,但更改了名称和一些语法。你仍然容易受到错误的影响,因为你仍然有很多条件(并且可能更多,因为你现在必须确保你的哨兵值是唯一的)。
| 归档时间: |
|
| 查看次数: |
1173 次 |
| 最近记录: |