Поле AutoField
является видом поля IntegerField
, поэтому вы не можете использовать PK как A00001
.
Таким образом, возможный способ выполнить требование - изменить AutoField
на CharField
.
Технически, вы можете использовать "String PK Field" Но вы должны знать о проблемах / проблемах производительности, если вы используете это.
Здесь я нашел один хороший пост SO, который объясняет то же самое - Строки в качестве первичных ключей в базе данных SQL
=================== ================================================== ===
Если вы все еще действительно хотите перейти на String PKs , прочитайте следующее
Сначала вам нужно использовать CharField
вместо AutoField
и переопределить save()
метод модели
<b>from django.db.models import Max</b>
class Custom(models.Model):
id = models.<b>CharField</b>(primary_key=True, editable=False, max_length=10)
name = models.CharField(max_length=100)
<b>def save(self, **kwargs):
if not self.id:
max = Custom.objects.aggregate(id_max=Max('id'))['id_max']
self.id = "{}{:05d}".format('A', max if max is not None else 1)
super().save(*kwargs)</b>