django - 如何访问 djongo 模型上的 _id 字段,它返回无
问题描述
此代码创建一个用户文档类 UserManager(BaseUserManager):
def create_user(self, name, email, password, mobile_number, alias=None):
user = self.model(email=self.normalize_email(email))
user.name = name
user.mobile_number = mobile_number
user.set_password(password)
user.save()
return user
def create_superuser(self, email, password):
user = self.create_user(email, password)
user.is_staff()
user.is_superuser = True
user.save()
return user
这是它使用djongo模型类的用户模型
class User(AbstractBaseUser):
_id: ObjectIdField(primary_key=True)
email = EmailField(null=False, unique=True)
name = CharField(max_length=30)
mobile_number = CharField(max_length=10, unique=True)
is_active = BooleanField(default=True)
is_staff = BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = "email"
class Meta:
db_table = "login"
user = User()
user.email = 'test@mail.com
user.name = 'name'
user_mobile_number = '7894561236'
user.save()
print(user._id) -> None 以这种方式访问用户 id 返回 None
user.name = 'newname'
user.save() #this creates a new instance of document
解决方案
您没有隐式创建 _id。_id 字段的创建通常由 MongoDB 服务器(文档)提供。因此,使用您的代码,您只能检索插入的对象并获取它的 _id 值。
User.objects.filter(email = 'test@mail.com').first()._id
如果您想在插入之前获得 _id 值,那么您需要使用 bson.objectid.ObjectId 类来创建它。您可以创建新的唯一标识符或创建自定义标识符。但请记住,ObjectId oid 参数只能是一个 ObjectId,也可以是任意 12 个字节。 在 pymongo 中使用 ObjectIds 的工具
from bson.objectid import ObjectId
user._id = ObjectId(b'123456789012') # or ObjectId()
推荐阅读
- powerbi - 图形随着时间的推移重播状态
- css - 如何防止仅在我的主页上滚动?
- hadoop - 如何运行查询配置单元并通过日志获取 applicationID
- bdd - CodeceptJS、BDD、PageObjects、输出中列出的步骤
- haproxy - 如何在 haproxy 配置上启用 TLSv1.0
- crystal-reports - Crystal Reports 中的正确 instr 公式导致标签无法打印
- javascript - 在 JavaScript 中用 .map 匹配两个类似的索引
- java - (Android, java) 无法在 Firebase 实时数据库中重命名子节点两次(已解决:阅读我的第一篇文章的底部以获得答案)
- iis - 如果两个域都指向同一个 IP 地址,是否可以将多个域绑定到一个网站?
- javascript - react 钩子可以用来注入组件吗?