在 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 将设置 AutoFieldBigAutoField 的主键,前提是数据库支持返回分配的主键。

因此您应该将模型重写为:

class Product(models.Model):
    product_id = models.<strong>BigAutoField(</strong>primary_key=True<strong>)</strong>
    # …

原因是Django在对象保存到数据库之前不知道对象的主键(pk)是什么。

那是因为 Django 无法确定传入对象的 pk 值,而是由您的数据库确定。为了获得 pk,您首先必须保存对象然后检索其 pk。