【问题标题】:fetching not with custom primary id in django在 django 中不使用自定义主 ID 获取
【发布时间】:2022-01-17 16:58:52
【问题描述】:

我创建了一个表,其中主 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 为空 请给我一个解决方案来解释为什么会发生这种情况。

【问题讨论】:

  • 您应该使用AutoFieldBigAutoField

标签: python-3.x django django-models


【解决方案1】:

如果数据库支持返回分配的主键,Django 将设置AutoFieldBigAutoField 的主键。

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

class Product(models.Model):
    product_id = models.BigAutoField(primary_key=True)
    # …

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-02
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2010-09-05
      相关资源
      最近更新 更多