在 Django 中不使用自定义主 ID 获取
fetching not with custom primary id in django
我创建了一个 table,其中主要 ID 必须自定义 ID product_id,例如
class Product(models.Model):
product_id = models.BigIntegerField(auto_created = True,primary_key = True, unique=True)
name = models.CharField(max_length=200)
ref = models.CharField(max_length=100)
number= models.CharField(max_length=100)
class Meta:
db_table = "products"
def __str__(self):
return self.name
创建记录后,我想获取最新记录的 ID,但是当我检索具有此 ID 的数据时,得到 None
product = Product.objects.create(name=name, ref=ref, number=number)
print(product.product_id)
product.product_id
id 越来越空
请给我一个解决方案来解释为什么会这样。
Django 将设置 AutoField
或 BigAutoField
的主键,前提是数据库支持返回分配的主键。
因此您应该将模型重写为:
class Product(models.Model):
product_id = models.<strong>BigAutoField(</strong>primary_key=True<strong>)</strong>
# …
原因是Django在对象保存到数据库之前不知道对象的主键(pk)是什么。
那是因为 Django 无法确定传入对象的 pk 值,而是由您的数据库确定。为了获得 pk,您首先必须保存对象然后检索其 pk。
我创建了一个 table,其中主要 ID 必须自定义 ID product_id,例如
class Product(models.Model):
product_id = models.BigIntegerField(auto_created = True,primary_key = True, unique=True)
name = models.CharField(max_length=200)
ref = models.CharField(max_length=100)
number= models.CharField(max_length=100)
class Meta:
db_table = "products"
def __str__(self):
return self.name
创建记录后,我想获取最新记录的 ID,但是当我检索具有此 ID 的数据时,得到 None
product = Product.objects.create(name=name, ref=ref, number=number)
print(product.product_id)
product.product_id
id 越来越空
请给我一个解决方案来解释为什么会这样。
Django 将设置 AutoField
或 BigAutoField
的主键,前提是数据库支持返回分配的主键。
因此您应该将模型重写为:
class Product(models.Model):
product_id = models.<strong>BigAutoField(</strong>primary_key=True<strong>)</strong>
# …
原因是Django在对象保存到数据库之前不知道对象的主键(pk)是什么。
那是因为 Django 无法确定传入对象的 pk 值,而是由您的数据库确定。为了获得 pk,您首先必须保存对象然后检索其 pk。