Как мы можем сохранить уникальный идентификатор, если я сделаю первичным ключом любой другой столбец?
Я хочу использовать ID генерации по умолчанию, а также сделать другое поле первичным ключом. Могу ли я сделать это с помощью django?
это мой объект::
{
"platform_subscriber_id": "XXXXXXXXXXXXXXX",#this is custom primary key.
"platform_subscriber_entity": "loop",
"platform_subscriber_secret_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"is_remove": false,
"update_time": "2022-02-09T09:18:28.991032Z",
"create_time": "2022-02-09T09:18:28.991038Z",
"platform_subscriber_owner": 1
},
я хочу старый уникальный ID тоже...
{
"id":1,#this is default one i want back
"platform_subscriber_id": "XXXXXXXXXXXXXXX",#this is custom primary key.
"platform_subscriber_entity": "loop",
"platform_subscriber_secret_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"is_remove": false,
"update_time": "2022-02-09T09:18:28.991032Z",
"create_time": "2022-02-09T09:18:28.991038Z",
"platform_subscriber_owner": 1
}
вот как выглядит моя модель:
class Project(models.Model):
platform_subscriber_owner = models.ForeignKey(User, verbose_name=_("project owner"),db_column="platform_user_id", on_delete=models.CASCADE,null=True,blank=True)
platform_subscriber_id = models.CharField(_("Project Key"), db_column="platform_subscriber_key", max_length=64,primary_key=True, blank=True)
platform_subscriber_entity = models.CharField(_("Project Names"), max_length=64,blank=True)
platform_subscriber_secret_key = models.CharField(_("Project Secret Key"), max_length=64,blank=True)
is_remove = models.BooleanField(_("Remove"),default=False)
update_time = models.DateTimeField(_("Updated Time"), default = timezone.now)
create_time = models.DateTimeField(_("Created Time"), default = timezone.now)
Нет. Поддерживаются только одностолбцовые первичные ключи. Вы можете сделать его unique=True вместо primary_key=True, это решит вашу проблему
проверьте это
Но на практике это не является проблемой, поскольку ничто не мешает вам добавить другие ограничения (используя опцию модели unique_together или создав ограничение непосредственно в базе данных) и обеспечить уникальность на этом уровне.