Выборка не с пользовательским основным идентификатором в django
Я создал таблицу, в которой первичный 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 получает null
Пожалуйста, дайте мне решение, почему это происходит.
Django установит первичный ключ AutoField
или BigAutoField
, если база данных поддерживает возврат назначенного первичного ключа.
Таким образом, вы должны переписать модель следующим образом:
class Product(models.Model):
product_id = models.BigAutoField(primary_key=True)
# …
Причина этого в том, что Django не знает, каким будет первичный ключ (pk) объекта до того, как объект будет сохранен в базе данных.
Это потому, что Django не определяет значение pk для входящего объекта, это делает ваша база данных. Чтобы получить pk, вы должны сначала сохранить объект, а затем получить его pk.