Дополнительный идентификатор в модели - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь создать список отчетов, относящихся к проекту. Каждый проект может иметь несколько отчетов. Каждый отчет должен иметь уникальный идентификатор, то есть: 1, 2, 3 и т. Д. Я храню все отчеты в одной таблице, и поэтому я не могу использовать автополе Джанго, потому что я уже использую его для первичного ключа.

class Cawreport(models.Model):
    caw_id = models.AutoField(primary_key=True)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    # report_id is unique for each project
    report_id = models.IntegerField(default=1)

Как лучше всего увеличить report_id для каждого нового отчета? Чтобы вы посоветовали? Рекомендуете ли вы найти максимальное количество (report_id) для каждого проекта? Или я должен "посчитать" записи report_id для каждого проекта и добавить +1? Или может быть что-то совершенно другое?

Заранее спасибо

Edit: Я хочу, чтобы это было: Проект 1: cawreport1, cawreport2 и т. Д. ... Проект 2: cawreport1, cawreport2 и т. Д. ...

Я хочу добиться чего-то похожего на программное обеспечение для выставления счетов, в котором вы не сможете удалить и выставить счет, не заметив этого. Клиент моего клиента не хочет, чтобы мой клиент мог удалить отчет cawreport и перейти к следующему номеру в последовательности. На самом деле они обычно используют существующий cawreport вместо того, чтобы удалять его и создавать новый.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Первичный ключ уникален для каждой записи в базе данных, поэтому при добавлении нового отчета, связанного с Project, он автоматически становится уникальным. Вы можете легко отсортировать отчеты Project в таблице. Вы также можете добавить поле даты в отчетах для сортировки.

class Cawreport(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    datetime =  models.DateTimeField(auto_now=True)

Таким образом, нет необходимости отслеживать последний идентификатор отчета, связанный с проектом.

0 голосов
/ 17 ноября 2018

Вы можете использовать UUIDField вместо IntegerField/AutoField.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...