Автоинкрементное поле при сохранении объекта - Джанго - PullRequest
0 голосов
/ 26 марта 2019

Пока у меня есть эта функция:

def my_number():
    x = '0000'
    return 'MY{0}'.format(str(int(x) + 1).zfill(len(x)))

Который я называю так:

    number_seq = models.CharField(_("Ref."), unique=True, db_index=True,
                             default=my_number, null=True)

Это работает, но когда я пытаюсь сохранить новый документ, он просто создает новый MY0001, и он должен увеличиваться, как MY0002, MY0003 и т. Д.

В чем может быть причина?

1 Ответ

2 голосов
/ 26 марта 2019

Вместо того, чтобы использовать ваш подход, я думаю, вы должны объявить AutoField в качестве первичного ключа и, возможно, иметь метод свойства с именем number_seq, чтобы получить значение для справки.Например:

class SomeModel(models.Model):
    your_pk = models.AutoField(primary_key=True)

    @property
    def number_seq(self):
        return 'MY{0}'.format(str(self.your_pk).zfill(4))

Но вы не можете выполнить запрос непосредственно к нему, как SomeModel.objects.filter(number_seq="MY001") не будет работать.Но вы можете сделать следующее, чтобы получить необходимые объекты.Например:

value = "MY001"
SomeModel.objects.get(pk=int(value[2:]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...